2008-09-30 40 views
1

我發佈了一個對this question的回答,其中包括關於String.Split()應該如何接受IEnumerable字符串>而不是字符串[]的結尾的非常短暫的咆哮。從對象結果繼承IEnumerable

這讓我思考。如果從其他所有東西繼承的基類Object類提供了IEnumerable的默認實現,那麼現在所有東西都只返回一個Enumerator到一個項目(本身) - 除非重寫了其他類似於集合類的東西。

這個想法是,然後如果像String.Split()方法確實接受IEnumerable而不是數組我可以傳遞一個單一的字符串到函數,它只會工作,而不是有很多關於創建一個分隔符數組。

我確定有各種各樣的原因不這樣做,其中最重要的是,如果一切都實現了IEnumerable,那麼實現在默認情況下執行的幾個類可能會表現出與您預期不同的行爲在某些情況下。但我仍然認爲這將是一個有趣的練習:會有什麼其他的後果?

+0

我不知道該不該拆我的答案... – MagicKat 2008-09-30 20:54:50

回答

0

索引操作符([])不是IEnumerable的<Ť> 合同看着反射器中的代碼後的一部分,代碼使用索引操作符重,這始終是陣列的一部分。

好吧,簡單地說,Array將始終有一個枚舉器。

的想法是,那麼如果像String.Split()的方法確實接受了IEnumerable,而不是一個數組我可以在一個字符串傳遞給函數,它只會工作,而不必太多關於與創建分隔符數組。

這是不正確,串繼承IEnumerable的<焦炭>而你沒有通用的差異,所以你不能投IEnumerable的<焦炭>到IEnumerable的<串>。您將獲得IEnumerable <char>版本的拆分,而不是所需的字符串。

+0

不過,我更喜歡它,如果接受的string.join IEnumerable的,而不是字符串[]作爲現在的情況。 – 2008-09-30 20:36:33

0

你有沒有想過使用助手對象並實現IEnumerable類的拆分?

我曾經爲Enum類做過GetDescription,所以很容易得到DescriptionAttribute。它工作得非常好。

2
public static IEnumerable<object> ToEnumerable(this object someObject) 
{ 
    return System.Linq.Enumerable.Repeat(someObject, 1); 
}