【发布时间】:2015-10-01 10:49:44
【问题描述】:
在开展项目时,我发现了一些我和我的同事都无法解释的行为。使用的代码简化如下:
public Foo DoSomethingWithFoo()
{
Foo foo;
try
{
foo = GetFoo();
}
catch (Exception e)
{
DbHandler.LogException(e);
throw;
}
return foo;
}
这编译得非常好,但只要我们删除throw; 语句。我们得到一个编译错误:Use of unassigned local variable 'foo'
问题不是解决它,我们可以写Foo foo = null;。
我们知道,在 C# 中,局部变量没有默认值,这与分配为 null 不同。只是我们似乎无法弄清楚为什么删除 throw 语句会导致这种行为。虽然我确实找到了一些关于未定义变量的更多信息,但我还没有找到任何东西来解释这一点。
那么这背后的解释是什么?
【问题讨论】: