8

在过去,我们可以使用大括号方便地初始化可变集合,如下例所示:

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

是否有类似的语法可用于 BCL 不可变集合?我知道它仍然是一个预发布版本,但也许有推荐的语法,或者至少这个问题将作为实现这些方便初始化程序的反馈。

同时,我发现的最短的是:

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

1 回答 1

10

是否有类似的语法可用于 BCL 不可变集合?

据我所知 - 不幸的是,对象和集合初始化程序都依赖于可变性。在这方面,遗憾的是,该语言没有被设计成如果有一个Add具有返回值的方法,则可以将其用作中间值。(这对在对象初始化器中设置属性没有帮助,请注意,我更喜欢这个名称PlusAdd使语义更清晰。)

我认为您已经使用的方法是最适合快捷方式的方法。

因为ImmutableList它稍微简单一些:

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

相当简单(并且允许类型推断),但我不知道有任何类似的ImmutableDictionary. 有一个重载Create需要一个IEnumerable<TKey, TValue>,但是构建任何实现都可能与构建可变字典一样繁琐,就像您已经在做的那样。

于 2013-06-02T11:16:14.070 回答