爲什麼T[]
在C#中代表數組而不是IEnumerable<T>
?T []代表數組,爲什麼不是IEnumerable <T>?
我知道泛型是在.NET 2.0中引入的。如果它是從頭開始設計的,將[]
映射到數組是否有意義?積極使用LINQ擴展方法,我寧願寫簡單的T[]
而不是笨重的IEnumerable<T>
或顯式的.ToArray()
。
我想知道只是出於學術的原因。
爲什麼T[]
在C#中代表數組而不是IEnumerable<T>
?T []代表數組,爲什麼不是IEnumerable <T>?
我知道泛型是在.NET 2.0中引入的。如果它是從頭開始設計的,將[]
映射到數組是否有意義?積極使用LINQ擴展方法,我寧願寫簡單的T[]
而不是笨重的IEnumerable<T>
或顯式的.ToArray()
。
我想知道只是出於學術的原因。
T[]
是靜態類型C語言數組的標準語法。如果.NET 1.0具有泛型,則數組可能使用了Array<T>
類型。
無論如何,如果T[]
用於IEnumerable<T>
它只能在聲明中使用,並且您將無法使用new T[] { ... }
創建一個。就接口而言,將它映射到IList<T>
會更有意義,因爲方括號表示索引。
而集合是可以修改的。 –
從技術上講,如果編譯器願意幫助(例如,它可能會爲您創建一個「Array
.net和C#中的許多頑疾都可追溯到.net 1.0沒有泛型的事實;進一步的量可追溯到通用接口最初不支持協方差或逆變的事實。在支持下標的最小標準接口(即IList
Java,C++,C中的T []是什麼? –
爲什麼我們使用圓括號進行函數調用?這就是這樣......在這裏。 –
'IEnumerable'不是'T []'。他們是不同的東西。一個是接口,另一個是內置類型(數組)。請注意'IEnumerable '不*支持索引,而數組呢。你可能會認爲你可以完全從語言中刪除數組,因爲你有'List '。我敢肯定,有表現頭腦的人會抗議,壽:) –