欲自定義對象的數組傳遞給一個函數像String.Join
其具有以下特徵:傳遞數組函數,採用任一params對象[]或IEnumerable的<T>
public static string Join(string separator, params Object[] values)
public static string Join(string separator, IEnumerable<T> values)
如果我這樣調用該函數:
var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join("\n", arr);
我得到一個編譯錯誤:
The call is ambiguous between the following methods or properties: 'string.Join(string, params object[])' and 'string.Join(string, System.Collections.Generic.IEnumerable)'
我可以用IEnumerable<T>
功能解決歧義:
var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join<MyClass>("\n", arr);
但我可以調用params object[]
功能?在性能嚴重的情況下,最好直接訪問數組,而不是通過枚舉器訪問數組。
我使用C#4.0,如果這有什麼區別。
正如我在我的問題中提到的,我想將數組傳遞給我自己的函數(而不是String.Join,但具有類似的方法簽名)的適當實現。這裏的性能差異是由於我的函數的不同實現。一些操作,比如獲取集合中的元素數量,使用數組而不是「IEnumerable」更快。 –
bouvierr
2013-04-10 21:22:46
在IEnumerable是數組的情況下,Count()擴展方法使用.Length屬性,但那不是你的觀點。如果性能差異至關重要,您可能需要考慮爲成員使用不同的名稱,而不要依賴重載分辨率。因此,你不必強制編譯時類型來獲得你正在尋找的語義。 – Doug 2013-04-12 17:49:16