我不能在主范围内的Try {}范围内使用变量分配,但在catch {}中添加return后我可以吗?

时间:2017-04-17 07:48:44

标签: c# try-catch

我试图弄清楚为什么这段代码能够使用try scope中的变量。如果我没有实现返回catch {}它会导致错误,但是在catch中返回它会运行没有问题,我真的不明白为什么,我希望两者都会导致错误。那么为什么它能够运行?

static void Main(string[] args)
    {
        DayOfWeek favDay;
        try
        {
            favDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), Console.ReadLine());
        }
        catch(Exception x)
        {
            Console.WriteLine(x.Message);
            Console.ReadLine();
            return; // Without implementing this return I cannot use variable favDay after in Main to pass it into Method.
        }
        Print(favDay);
        Console.ReadLine();
    }

static void Print(DayOfWeek x)
    {
        switch (x)
        {
            case DayOfWeek.Friday:
                Console.WriteLine("Weieeeee");
                break;
            default:
                Console.WriteLine(":(");
                break;
        }
    }

感谢您的回复。 :)

2 个答案:

答案 0 :(得分:3)

通过添加return;语句,您可以阻止该方法使用变量favDay,除非它已被分配。在方法结束时,唯一会导致使用的其他代码路径在try块中成功分配,因此变量在稍后使用之前分配。

如果没有return;语句,您将获得"使用未分配的局部变量"错误消息,因为执行可以在catch块中分配变量之前到达try块,然后使用变量,而不是为变量赋值。

答案 1 :(得分:0)

您所看到的行为的原因是由于变量尚未初始化并返回; in catch将自动推断为其他func使用该变量所需的变量初始化的空值。因此,该方法将是一个错误,以便进一步保存任何异常情况。