2013-10-15 53 views
0

例如,返回Task對象的方法後綴爲「Async」。或者使用IAsyncResult的方法前綴爲「開始」和「結束」。在.NET中是否有命名枚舉器方法(yield return)的約定?

返回IEnumerable<T>的方法是否有任何約定?感覺應該是這樣,但是我沒有看到.NET庫中的任何迭代器方法。

如果答案是「否」,隨時建議您的答案的一部分。

+1

我可以想到當舊的數組返回方法在.Net 4.0中添加新的IEnumerable返回版本時出現兩種情況:File.ReadAllLines()ReadLines()和Directory.GetFiles() )'→'EnumerateFiles()'。 – svick

回答

2

我還沒有看到在.NET庫

有大量的任何迭代方法,你就還沒有認識到他們作爲迭代器。這是非常好的設計,它不應該是顯而易見的。其中很多都有明顯的名字:GetEnumerator()。適用於作爲集合的任何類,它實現IEnumerable <>因此,您使用for each來迭代客戶端代碼時,您甚至不會看到該名稱。

Linq擴展方法值得注意,它們都是迭代器。這裏的命名約定是根據它們執行的操作來選擇它們的名稱。像Select()和Where(),你一定知道它們。這是基於它們的操作到知名的SQL關鍵字的自然映射。懷疑在自己的程序中有類似的東西。

然後有一堆名爲GetXxxs()的地方,其中Xxxs是他們返回的元素名稱的複數。

因此,如果適合該類實現IEnumerable <>,則首先考慮GetEnumerator()。然後選擇GetXxxs()。如果你真的想明確它是一個迭代器,那麼你可以使用EnumerateXxx()。

0

沒有約定。它甚至不確定返回IEnumerable的東西實際上是使用yield return進行迭代還是僅僅返回已經存在的實現IEnumerable的集合。我不想要一個額外的命名方案。