我试图弄清为什么此代码能够使用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
块,然后掉落在没有变量的情况下,为变量分配了一个值。
您看到的该行为的原因是由于该变量尚未初始化并返回的事实;在捕获中,将自动推断使用其他弹性变量所需的可变初始化的空值。因此,该方法在此时将是一个错误,以保存任何异常情况。