請問有人可以解釋一下,爲什麼只有ForEach陣列的靜態/共享版本?爲什麼只有ForEach陣列的靜態/共享版本?
IE: ForEach<T>(T array[], System.Action(Of T) action[])
我認爲這事做與實施的實例方法的類型推斷的要求,但在聲明數組您提供類型吧?
請問有人可以解釋一下,爲什麼只有ForEach陣列的靜態/共享版本?爲什麼只有ForEach陣列的靜態/共享版本?
IE: ForEach<T>(T array[], System.Action(Of T) action[])
我認爲這事做與實施的實例方法的類型推斷的要求,但在聲明數組您提供類型吧?
的一個問題是,有無處可記錄的實例方法,其可僅在「矢量」。 「向量」是一個基數爲0的一維數組,因此在C#中表示爲T[]
的任何數據都是一個向量,但例如T[,]
不是。
這意味着不是Array
的每個實例都應該有方法 - 即使它的確如此,您將如何表示T
?每種數組類型都是分開的,並且在.NET中沒有通用類型,它是所有數組的基類。我們得到的全部是Array
。因此,鑑於我們必須在類型系統的某個地方引入類型參數,並且假定我們也將它限制爲「向量」類型,靜態方法似乎是一種適當的解決方法。
注意這是怎麼不與List<T>
,我們已經擁有了類型參數,這樣可以創建一個簡單的實例方法的情況下。
也值得考慮一下使用Array.ForEach
實際上以最簡潔的代碼結束,而不僅僅是使用foreach
循環。我會通常只有當我已經有一個委託執行每個元素時才使用它。否則,語言結構會變得更加清晰,並且在無例外情況下返回或跳出循環的能力當然更加靈活。
您提供T來說明數組可以包含在其中。因此,由於Array實現了ienumerable,所以它在它上面獲得了ForEach擴展方法。
有沒有其他的東西你要找?
想知道埃裏克斯後可以幫助您與陣列http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
你在談論哪種'ForEach'擴展方法? –
對於每個哪些erics談。 –
Zenwalker
哪個*不是*在框架中,請注意。所以對於大多數人來說,數組不會「得到」ForEach擴展方法。你必須自己提供一個。還要注意的是'ForEach'通常會是對擴展方法的IEnumerable'',不'IEnumerable',所以它實際上是有關實施IEnumerable的'' ...如果你只得到了類型Array'的'參考向量,你首先要調用'Cast ()'或'OfType ()'。 –