【发布时间】:2019-11-28 22:28:15
【问题描述】:
如您所料,此代码会产生编译器错误:
public static IEnumerable<int> Foo()
{
}
并非所有代码路径都返回值
然而,这编译时只有一个关于无法访问代码的警告:
public static IEnumerable<int> Foo()
{
if(false)
{
yield return 0;
}
}
这会产生一个空的可枚举。为什么这会起作用,它是定义的行为吗?
【问题讨论】:
-
哇,如果真的是这样的话,我会给 c# 编译器很多功劳。 @mjwills
-
@JamieTaylorSangerman 这几乎是相反的。编译器非常愚蠢——根据我的理解,它只是说“好吧,我看到了收益回报”。它不会尝试做过多的可达性分析等。
标签: c# ienumerable