如何避免在try-Catch块中定义未赋值的局部变量 [英] How to avoid 'Unassigned Local Variable' defined inside a try-catch block

查看:29
本文介绍了如何避免在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
" + status.Response);
            txtConsole.AppendText(Environment.NewLine);
        }
        catch
        {
            txtConsole.AppendText("Some error in GetLinks");
            txtConsole.AppendText(Environment.NewLine);
        }

        Regex regex = new Regex(@"s*(?i)hrefs*=s*(""([^""]*"")|'[^']*'|([^'"">s]+))", RegexOptions.IgnoreCase);
        MatchCollection splits = regex.Matches(reader.ReadToEnd());

现在,当我尝试构建/编译代码时,它显示

"使用未赋值的局部变量‘Reader’"

现在我的问题是,如果try语句顺利运行而没有抛出任何异常,为什么编译器不能访问try块内分配给Reader的值?

推荐答案

您正在使用一个变量,该变量在Try/Catch块外部赋值。您需要将整个代码移到try块中。

您可以像@Svexo建议的那样为它赋值null,但这将在流错误输出时引发异常。

这篇关于如何避免在try-Catch块中定义未赋值的局部变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆