【问题标题】:Can I initialize a BCL immutable collection using braces?我可以使用大括号初始化 BCL 不可变集合吗?
【发布时间】:2013-05-28 17:48:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# collections initialization immutability base-class-library


    【解决方案1】:

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

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

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

    ImmutableList 稍微简单一些:

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

    相当简单(并且允许类型推断),但我不知道ImmutableDictionary 有什么类似的东西。 Create 的重载需要 IEnumerable&lt;TKey, TValue&gt;,但构建任何实现都可能像构建可变字典一样繁琐。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2017-01-23
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2017-09-10
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多