为什么variant_1
会像预期的那样在variant_2
与CS0165: Use of unassigned local variable
一起失败时进行编译?我想象可能最终会将未分配的变量初始化为它们的默认变量,但我没有看到这种情况发生。
我用.NET Core 3.1
运行了这段代码
static string variant_1()
{
string str;
try
{
str = "grrr";
}
finally
{
}
return str; //no problem ?
}
static string variant_2()
{
string str;
try
{
str = "grrr";
}
catch (Exception ex)
{
}
return str; //does not compile: `CS0165: Use of unassigned local variable`
}
发布于 2021-01-28 14:32:49
让我们想象一下,这里可能会发生一些不好的事情:
static string variant_2()
{
string str;
try
{
//Something bad happens
str = "grrr";
}
catch (Exception ex)
{
}
return str; //does not compile: `CS0165: Use of unassigned local variable`
}
也许是ThreadAbortException
。也许是别的什么事。会发生什么?控制流进入catch
,然后执行函数的其余部分。str
从未被分配过。
但是,对于finally
情况,如果出现任何异常,则控制流可能进入finally
,但随后退出该方法。永远不会遇到return
。通过try
/finally
块继续到return
的唯一路径是在try
部件中不发生异常的路径,因此在其中发生的分配必须已经完成。
https://stackoverflow.com/questions/65938847
复制相似问题