为什么一种语言允许我们使用具有无限循环且不返回任何内容的非空方法?
非无效方法的规则是 ,返回的每个代码路径都必须返回一个值
,并且该规则在您的程序中得到满足:返回的零个代码路径中的零个确实返回一个值。规则不是“每个非无效方法都必须具有返回的代码路径”。
这使您可以编写如下的存根方法:
IEnumerator IEnumerable.GetEnumerator() { throw new NotImplementedException(); }那是一种非无效的方法。为了满足接口,它 必须 是非无效方法。但是使该实现非法是愚蠢的,因为它不返回任何东西。
由于
goto(记住,a
while(true)只是一种更舒适的编写方式
goto)而不是
throw(是的另一种形式
goto),因此您的方法具有无法到达的终点是无关紧要的。
为什么编译器甚至不警告返回某些内容?
因为编译器没有很好的证据证明代码是错误的。有人写信
while(true),看来这样做的人很可能知道他们在做什么。
在哪里可以阅读有关C#中的可达性分析的更多信息?
在这里查看我关于该主题的文章:
ATBG:事实上和法律上的可及性
您也可以考虑阅读C#规范。



