我不能在主作用域中使用在 Try{} 作用域中分配的变量,但是在 catch{} 中添加返回后我可以吗?



我试图弄清为什么此代码能够使用try范围中的变量。如果我没有实现返回以捕获{}会导致错误,但是随着返回的返回,一切都没有问题,我真的不明白为什么,我希望两者都会导致错误。那么为什么它能够运行

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;
        }
    }

感谢您的回复。:(

通过添加 return;语句,您可以防止该方法能够使用变量favDay,除非分配。在方法末尾,唯一导致使用的代码路径会通过try块中的成功分配,因此变量是在以后使用之前分配的。

没有return;语句,您将获得"使用未分配的本地变量"错误消息,因为执行可以在try块中分配变量之前,可以到达catch块,然后掉落在没有变量的情况下,为变量分配了一个值。

您看到的该行为的原因是由于该变量尚未初始化并返回的事实;在捕获中,将自动推断使用其他弹性变量所需的可变初始化的空值。因此,该方法在此时将是一个错误,以保存任何异常情况。

最新更新