2013-06-02 49 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>,但构建任何实现可能与构建可变字典一样繁琐,正如您已经在做的那样。

相关问题