伊夫剛剛看到的一段代碼,使用一個通用的列表類實例化本身以下列方式:這是什麼語法使用新的後面的大括號內的列表?
var foo = new List<string>(){"hello", "goodbye"};
的構造器後的大括號是特別令人困惑。這讓我想起有點的
var bar = new string[]{"hi","bye"};
但在過去,我wouldve一直使用:
var foo = new List<string>(new []{"hello", "goodbye"});
有沒有人有一個鏈接解釋的第一行代碼的語法?我甚至不知道從哪裏開始用Google搜索它。
事實上,「混淆」的語法立即提醒你*數組*的相同特徵可能表明它根本就沒有讓人迷惑,不是嗎?我們非常小心地選擇了這種語法,以便它能夠讓你確切地具有你所擁有的直覺。 – 2012-02-24 18:59:09
@maxp「過去」中,您通過調用一個構造函數初始化List,該構造函數採用IEnumerable 並使用數組初始值設定器語法創建匿名集合,並創建對同一集合的兩個引用。 TBH我不知道爲什麼編譯器不會優化第1行到第3行的語法 - 它肯定知道由'new []'生成的對象被傳入列表構造函數不能被引用以任何其他方式獨立,因此沒有必要保持活力。 –
2012-02-24 19:01:50
@ValAkkapeddi:*編譯器團隊*應該如何知道編寫'List'的人將要處理那個對象?編譯器沒有特別的知識,任何特定的'List '構造函數對傳遞給它的數組都沒有特別的作用。 –
2012-02-24 19:06:11