2011-08-18 24 views

回答

4

的一個問題是,有無處可記錄的實例方法,其可僅在「矢量」。 「向量」是一個基數爲0的一維數組,因此在C#中表示爲T[]的任何數據都是一個向量,但例如T[,]不是。

這意味着不是Array的每個實例都應該有方法 - 即使它的確如此,您將如何表示T?每種數組類型都是分開的,並且在.NET中沒有通用類型,它是所有數組的基類。我們得到的全部是Array。因此,鑑於我們必須在類型系統的某個地方引入類型參數,並且假定我們也將它限制爲「向量」類型,靜態方法似乎是一種適當的解決方法。

注意這是怎麼List<T>,我們已經擁有了類型參數,這樣可以創建一個簡單的實例方法的情況下。

也值得考慮一下使用Array.ForEach實際上以最簡潔的代碼結束,而不僅僅是使用foreach循環。我會通常只有當我已經有一個委託執行每個元素時才使用它。否則,語言結構會變得更加清晰,並且在無例外情況下返回或跳出循環的能力當然更加靈活。

0

您提供T來說明數組可以包含在其中。因此,由於Array實現了ienumerable,所以它在它上面獲得了ForEach擴展方法。

有沒有其他的東西你要找?

想知道埃裏克斯後可以幫助您與陣列http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

+0

你在談論哪種'ForEach'擴展方法? –

+0

對於每個哪些erics談。 – Zenwalker

+0

哪個*不是*在框架中,請注意。所以對於大多數人來說,數組不會「得到」ForEach擴展方法。你必須自己提供一個。還要注意的是'ForEach'通常會是對擴展方法的IEnumerable'',不'IEnumerable',所以它實際上是有關實施IEnumerable的'' ...如果你只得到了類型Array'的'參考向量,你首先要調用'Cast ()'或'OfType ()'。 –

相關問題