什麼是精確在.Net中Enumerable.Range的實現;最好.Net 4?這是一個for-loop嗎?自定義實現(IEnumerable,IEnumerator)還是?Enumerable.Range實現
回答
的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應該爲您提供更多信息。
我不想要精華,我想要精確的答案 - 但我明白,由於許可限制,這是不可能的。感謝您的輸入,我現在使用了反射器並找到了答案。 – 2009-10-05 15:08:17
更像是:'if(!valid)throw exception;否則返回RangeInternal(...);'其中'RangeInternal'是一個迭代器。這是一個重要的區別,因爲如果你用無效參數調用'Range',你會立即得到異常。如果'Range'方法直接使用'yield',那麼在您收集集合之前您沒有例外。 – 2009-10-05 19:02:25
@Mehrdad - 這是一個非常好的例子,它可以立即拋出異常(而不是延遲),就像迭代本身一樣。當我提到錯誤檢查時,這就是我所指的,但是您已經更清楚地描述了它。 – CraigTP 2009-10-05 19:17:58
您可以使用Reflector來查看自己的實現。它在調用時檢查參數並拋出異常,所以Range
方法本身不是迭代器方法。它調用另一個迭代器方法。由於license restrictions,發佈確切的代碼並不好。
在反射器輸出的輕微但顯著差異(以及參數檢查,並CraigTP的回答和評論提到內在的額外級):
public static IEnumerable<int> Range(int start, int count) {
for(int current = 0; current < count; ++current) {
yield return start + current;
}
}
也就是說,而不是另一個局部變量,他們爲每個收益額外增加一項。
- 1. Enumerable.Range爲什麼實現IDisposable?
- 2. 擴展Enumerable.Range
- 3. enumerable.range中的錯誤?
- 4. Enumerable.Range和內存分配
- 5. 將Enumerable.Range轉換爲字符串列表
- 6. 從Enumerable.Range的字符到Z的列表
- 7. 問題在填充使用Enumerable.Range()
- 8. 怪異行爲Enumerable.Range(啓動,計數)
- 9. 實現polynimial類實現
- 10. 。bcrypt的實現,實現HashAlgorithm?
- 11. 更好的Enumerable.Range升序和降序範圍?
- 12. XML文本LINQ - 使用變量Enumerable.Range(INT,INT)
- 13. 打破一個IEnumerable <int>查詢其採用Enumerable.Range
- 14. 實現
- 15. 實現
- 16. 實現
- 17. 實現
- 18. IRepository - 實體實現
- 19. CPython內部實現的文檔實現
- 20. 使用ServiceStack實現多個ICacheClient實現
- 21. JMS使用Scala實現隊列實現
- 22. 有沒有實現HttpServletRequest的ServletRequest實現?
- 23. Fermat的小實現問題的實現
- 24. 如何在Delphi中實現XIRR實現?
- 25. 用Python實現sftp服務器實現
- 26. UnsupportedOperationException:未由KosmosFileSystem FileSystem實現實現
- 27. 在FastAdapter上實現IIClickListener實現IItem
- 28. 自然標記增強現實實現
- 29. 只實現IndexMut而不實現索引
- 30. 用Java實現的Plaid API實現
你爲什麼在意? – 2009-10-05 13:43:25
用反射器反編譯http://www.red-gate.com/products/reflector/ – 2009-10-05 13:45:51
我關心這個的原因是因爲我想知道實現的效率以及如何創建我自己的實現例如Int64和你有什麼。 – 2009-10-05 15:09:11