我试图弄清楚为什么这段代码能够使用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;
}
}
感谢您的回复。 :)
答案 0 :(得分:3)
通过添加return;
语句,您可以阻止该方法使用变量favDay
,除非它已被分配。在方法结束时,唯一会导致使用的其他代码路径在try
块中成功分配,因此变量在稍后使用之前分配。
如果没有return;
语句,您将获得"使用未分配的局部变量"错误消息,因为执行可以在catch
块中分配变量之前到达try
块,然后使用变量,而不是为变量赋值。
答案 1 :(得分:0)
您所看到的行为的原因是由于变量尚未初始化并返回; in catch将自动推断为其他func使用该变量所需的变量初始化的空值。因此,该方法将是一个错误,以便进一步保存任何异常情况。