Это одна ошибка, с которой я регулярно сталкиваюсь. Хотя мне удается так или иначе обойти это, это меня действительно раздражает. В фрагменте кода ниже, я хочу безопасного остерегаться исключений из myRequest.GetResponse()Как избежать «неназначенной локальной переменной», определенной внутри блока try-catch
WebRequest myRequest = WebRequest.Create(baseUri.OriginalString);
WebResponse myResponse;
Stream myStream;
StreamReader reader;
try
{
myResponse = myRequest.GetResponse();
myStream = myResponse.GetResponseStream();
reader = new StreamReader(myStream);
}
catch (WebException status)
{
txtConsole.AppendText("Error in GetLinks::WebException\n" + status.Response);
txtConsole.AppendText(Environment.NewLine);
}
catch
{
txtConsole.AppendText("Some error in GetLinks");
txtConsole.AppendText(Environment.NewLine);
}
Regex regex = new Regex(@"\s*(?i)href\s*=\s*(\""([^""]*\"")|'[^']*'|([^'"">\s]+))", RegexOptions.IgnoreCase);
MatchCollection splits = regex.Matches(reader.ReadToEnd());
Теперь, когда я пытаюсь построить/скомпилировать код, он говорит
«Использование неназначенная локальная переменная 'reader' '
Теперь мой вопрос, если инструкция try работает без каких-либо исключений, почему компилятор не может получить доступ к значению, присвоенному читателю внутри блока try?
Я использовал для перемещения всего внутри блока try. Но потом я понял, что не могу этого делать всегда. Однако, присваивая ему значение null, а затем проверяя исключение NULL после того, как оператор catch является тем, что мне нужно сделать. – SLearner
Ваше использование «читателя» после блока try показывает зависимость: ваш код зависит от правильного возврата блока try. По определению это должно быть включено в блок try. Когда это становится неуправляемым, вам придется использовать 'null', а затем надеяться, что вы всегда проверяете значение null. – jpaugh