C# 我可以使用大括号初始化BCL不可变集合吗?

C# 我可以使用大括号初始化BCL不可变集合吗?,c#,collections,initialization,immutability,base-class-library,C#,Collections,Initialization,Immutability,Base Class Library,在过去,我们可以使用大括号方便地初始化可变集合,如下例所示: var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; var myDictionary=newdictionary{{“hello”,0m},{“world”,1m}; 是否有类似的语法可用于BCL不可变集合?我知道这仍然是一个预发布版本,但可能有一个推荐的语法,或者至少这个问题将作为实现这些方便的初始值设定

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

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}};
var myDictionary=newdictionary{{“hello”,0m},{“world”,1m};
是否有类似的语法可用于BCL不可变集合?我知道这仍然是一个预发布版本,但可能有一个推荐的语法,或者至少这个问题将作为实现这些方便的初始值设定项的反馈

同时,我发现最短的是:

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary();
var myDictionary=newdictionary{{“hello”,0m},{“world”,1m}.ToImmutableDictionary();
是否有类似的语法可用于BCL不可变集合

据我所知并非如此——不幸的是,对象和集合初始值设定项都依赖于可变性。在这方面,令人遗憾的是,该语言没有设计成这样:如果有一个带有返回值的
Add
方法,该方法可以用作中间值。(请注意,这无助于在对象初始值设定项中设置属性,我更喜欢名称
Plus
而不是
Add
,以使语义更清晰。)

我认为你已经在使用的方法是最合适的捷径

对于
ImmutableList
,它稍微简单一些:

var list = ImmutableList.Create(1, 2, 3);
这相当简单(并且允许类型推断),但我不知道有任何类似的
ImmutableDictionary
。有一个超负荷的
Create
需要一个
IEnumerable
,但是构建任何实现都可能像构建可变字典一样复杂