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

Can I initialize a BCL immutable collection using braces?(我可以使用大括号初始化BCL不可变集合吗?)
本文介绍了我可以使用大括号初始化BCL不可变集合吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

同时,我找到的最短时间如下:

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

推荐答案

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

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

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

ImmutableList稍微简单一点:

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

相当简单(并允许类型推理),但我不知道有任何类似的ImmutableDictionary。有一个重载的Create,它接受一个IEnumerable<TKey, TValue>,但是构造任何实现都可能像构造可变字典一样麻烦,就像您已经在做的那样。

这篇关于我可以使用大括号初始化BCL不可变集合吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

The type initializer for #39;System.Data.Entity.Internal.AppConfig#39; threw an exception on a Sub Website(“System.Data.Entity.Internal.AppConfig的类型初始化程序在子网站上引发异常)
Possible to initialize multiple variables from a tuple?(可以从一个元组初始化多个变量吗?)
error loading database initializer with EF6(使用 EF6 加载数据库初始化程序时出错)
How to force fire OnModelCreating every DataContext initialized up(如何强制触发 OnModelCreating 每个初始化的 DataContext)
The type appear in two structurally incompatible initializations within a single LINQ to Entities query(该类型出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中)
Does Stacklt;gt; constructor reverse the stack when being initialized from other one?(是否堆栈lt;gt;构造函数在从另一个初始化时反转堆栈?)