Enumerable.Range在.Net中的精确实现是什么;更好的.Net 4是什么?这是一个屈服的循环吗?自定义实现(IEnumerable、IEnumerator)或?
发布于 2009-10-05 13:45:35
您可以使用反射器查看自己的实现。它检查参数并在调用时抛出异常,因此Range方法本身不是迭代器方法。它调用另一个方法,即迭代器方法。由于许可证限制,发布确切的代码是不可以的。
发布于 2010-05-28 14:59:15
反射面输出(以及CraigTP的答案及其评论中提到的论点检查和额外的内部化程度)有细微但显著的差异:
public static IEnumerable<int> Range(int start, int count) {
for(int current = 0; current < count; ++current) {
yield return start + current;
}
}也就是说,它们不是另一个局部变量,而是对每一个产量加一个额外的变量。
发布于 2019-05-02 16:13:29
这是一个屈服的循环吗?自定义实现(IEnumerable,IEnumerator)?
两者:-)
.NET 4
2014年2月,微软将.NET源代码浏览器放在网上。因此,你的问题现在可以用一个正式的来源来回答:
Enumerable.Range执行错误检查,然后调用私有方法RangeIterator,该方法使用已生成的-循环。
许可证仍然不允许在这里发布代码,但是您可以自己查看这个链接:
.NET核
.NET核心是在更宽松的麻省理工学院许可下授权的。我不是律师,所以我不知道这是否意味着我可以将其复制并粘贴到StackOverflow中,但以下是指向他们的Enumerable.Range实现的直接链接,该实现使用(自定义RangeIterator对象)。
https://stackoverflow.com/questions/1520136
复制相似问题