2013-06-02 79 views
5

在過去,我們可以用括號方便初始化可變集合,如下面的例子:我可以使用大括號初始化BCL不可變集合嗎?

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; 

是否有可與BCL不可變的集合中使用類似的語法?我知道它仍然是一個預發行版,但也許有一個推薦的語法,或者至少這個問題將作爲反饋來實現這些方便的初始化程序。

在平均時間,我已經找到了最短如下:

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary(); 

回答

7

是否有可與BCL不可變的集合中使用類似的語法?

不就我所知 - 不幸的是這兩個對象和集合初始化上的可變性依賴。在這方面,這種語言的設計並不令人遺憾,因爲如果有一個帶有返回值的Add方法,可以將其用作中間值。 (這將不會設定對象初始化的屬性的幫助,請不要忘記,和我喜歡的名字PlusAdd使語義更清楚。)

我覺得你已經在使用的方法是最合適的一個一條捷徑。

對於ImmutableList它稍微簡單:

var list = ImmutableList.Create(1, 2, 3); 

這是相當簡單(允許類型推斷),但我不知道任何東西ImmutableDictionary相似。 Create的重載需要IEnumerable<TKey, TValue>,但構建任何實現可能與構建可變字典一樣繁瑣,正如您已經在做的那樣。

相關問題