【发布时间】:2021-01-28 14:13:28
【问题描述】:
为什么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`
}
【问题讨论】:
-
@Selvin:不明白你的评论
-
所以有this,它解释了为什么“try”和“catch”可能不会被执行,但是你的“finally”是空的,所以这不是一个完整的答案。
-
@Veverke 差异...乍一看很难找到差异
-
如果在分配给
str之前发生异常,控制流永远不会到达return语句。 -
@Damien_The_Unbeliever:不应该同样适用于 try/finally 变体吗?