如何避免'未分配的局部变量'在try-catch块中定义
本文关键字:try-catch 定义 分配 何避免 局部变量 | 更新日期: 2023-09-27 18:17:44
这是我经常遇到的一个错误。虽然我设法用某种方法来规避它,但它真的让我很恼火。在下面的代码片段中,我想防止来自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());
现在,当我尝试构建/编译代码时,它显示
"未赋值局部变量'reader'的使用"
现在我的问题,如果try语句运行顺利,没有抛出任何异常,为什么编译器不能访问在try块内分配给reader的值?
您正在使用一个变量,该变量在try/catch块中分配,在该块之外。您需要将整个代码移到try块中。
您可以像建议的@Svexo那样将null
分配给它,但是如果流出错,这会抛出异常。
编译器说use of unassigned variable
,因为try/catch块之后的代码无论如何都会被执行。
如果你有一个异常,你捕获它,然后在它之后运行代码。这就是为什么你会得到这个错误。
- 将
null
分配给局部变量,然后在执行其余代码之前测试它们是否为null - 返回catch块中的函数。
- 或者按照建议将所有代码移到try块中@Femaref
WebRequest myRequest = WebRequest.Create(baseUri.OriginalString);
WebResponse myResponse = null;
Stream myStream= null;
StreamReader reader =null;
这将赋值变量
编辑:如果你这样做,你应该在try/catch
之外添加一个Ifif(reader != null)
{
Regex regex = new Regex(@"'s*(?i)href's*='s*('""([^""]*'"")|'[^']*'|([^'"">'s]+))", RegexOptions.IgnoreCase);
MatchCollection splits = regex.Matches(reader.ReadToEnd());
}
请注意,在您的情况下,最好将所有内容放在try/catch块中