SLe*_*ner 8 c# exception-handling try-catch
这是我经常遇到的一个错误.虽然我设法以某种方式规避它,但它真的让我烦恼.在下面的代码片段中,我想要安全防范来自myRequest.GetResponse()的异常
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());
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试构建/编译代码时,它说
"使用未分配的局部变量'读者'"
现在我的问题是,如果try语句运行顺利而没有抛出任何异常,为什么编译器不能访问try块内分配给reader的值?
Fem*_*ref 11
您正在使用在该块之外的try/catch块中分配的变量.您需要将整个代码移动到try块中.
您可以null像@Svexo建议的那样分配给它,但如果流出错,这将抛出异常.
编译器说use of unassigned variable因为无论如何都会执行try/catch块之后的代码.
如果你有一个例外,你抓住它,然后你运行代码.这就是你得到这个错误的原因.
你也可以
null给局部变量,然后在执行其余代码之前测试它们是否为空