.Net中Enumerable.Range的精确实现是什么;首选.Net 4?它是一个屈服于循环的吗?自定义实现(IEnumerable,IEnumerator)或?
答案 0 :(得分:1)
您可以使用Reflector查看自己的实施情况。它在调用时检查参数并抛出异常,因此Range
方法本身不是迭代器方法。它调用另一个方法,它是一个迭代器方法。由于license restrictions而发布确切代码并不合适。
答案 1 :(得分:1)
此accepted answer上的question应该会给您答案:
public static class Enumerable {
public static IEnumerable<int> Range(int start, int count) {
var end = start + count;
for(var current = start; current < end; ++current) {
yield return current;
}
}
}
这不是完全代码,因为在Range
方法中有很多错误检查等,而在内部,它调用其他方法,但是,上面引用的代码是Range
例程的“本质”。
检查Reflector中的代码可以为您提供更多信息。
答案 2 :(得分:1)
Reflector输出中的一个轻微但显着的差异(以及CraigTP的答案及其评论中提到的参数检查和内部化的额外水平):
public static IEnumerable<int> Range(int start, int count) {
for(int current = 0; current < count; ++current) {
yield return start + current;
}
}
也就是说,它们代替另一个局部变量,为每个产量应用额外的添加。
答案 3 :(得分:0)
.NET 4
2014年2月,Microsoft put a .NET Source Code browser online。因此,您的问题现在可以通过官方来源得到解答:
Enumerable.Range
使用自定义迭代器。
license仍然不允许在此处发布代码,但是您可以在以下链接中自行查看:
.NET Core
.NET Core是根据更宽松的MIT许可证授权的。我不是律师,所以我不知道这是否意味着我可以将其复制并粘贴到StackOverflow,但这是其Enumerable.Range
实现的直接链接: