C#编译器似乎并不关心throw
语句后是否有return
语句,即使throw
显然无法访问。相反的情况并非如此:编译器可以在return
无法访问后检测到throw
。这是编译器缺陷吗?
编译好:
string MyProperty
{
get
{
return "";
throw new InvalidOperationException();
}
}
string MyMethod()
{
return "";
throw new InvalidOperationException();
}
这将无法编译,导致return
语句失败:
string MyOtherProperty
{
get
{
throw new InvalidOperationException();
return "";
}
}
string MyOtherMethod()
{
throw new InvalidOperationException();
return "";
}
编辑:这是使用.NET 4.5.1,C#版本5.0。
编辑2:这是我在编译第二个选项时看到的警告(在返回之前抛出):Unreachable code detected