kon*_*ski 13
这是一个有趣的例子.考虑这样的函数:
public static IEnumerable<int> Fun()
{
if (false)
{
yield return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
线路yield被检测为无法到达.但是,删除它将使程序无法编译.yield函数中包含的函数提供了编译器信息来重新组织函数,以便不执行任何操作只返回空集合.随着yield行中删除,而它的需要,它看起来就像没有返回普通函数.
正如在评论中一样,这个例子是设计的,但是false我们不能从其他生成的项目中获得一个常量值(即这样的代码片段看起来不像在这种情况下那么明显).
编辑:请注意,yield构造实际上非常相似async/await.然而,后者的语言创造者采用了一种不同的(IMO更好)方法来阻止这种情况.可以以相同的方式定义迭代器块(在函数签名中使用一些关键字而不是从函数体中检测它).
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |