不可变字典

发布于 2024-10-26 14:22:04 字数 225 浏览 3 评论 0 原文

如何为不可变的 Dictionary 类实现构造函数?

另外,是否可以允许用户使用以下语法:

ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };

How would you implement constructors for an immutable Dictionary<TKey, TValue>-like class?

Also, is it possible to allow users to use the syntax:

ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

在风中等你 2024-11-02 14:22:05

让构造函数接受 IEnumerable>

这样,您可以这样做:

var Instance = new ImmutableDic<int, int>(
   new Dictionary<int, int> {1, 2}, {2, 4}, {3,1} });

您可以使用“new Dictionary”的“最小”添加来构造,也可以使用任何其他方便的方式并产生这样的可枚举序列。

Have the constructor accept an IEnumerable<KeyValuePair<TKey, TValue>>.

This way, you can do:

var Instance = new ImmutableDic<int, int>(
   new Dictionary<int, int> {1, 2}, {2, 4}, {3,1} });

You can construct with the "minimal" addition of "new Dictionary", and you can also use any other way that is convenient and produces such an enumerable sequence.

乖乖 2024-11-02 14:22:04

最简单的解决方案是编写一个接受可变 IDictionary 的构造函数。构建可变字典并将其传递给不可变字典的构造函数:

var data = new Dictionary<int, int> { {1, 2}, {2, 4}, {3,1} };
var instance = new ImmutableDic<int, int>(data);

正如 BoltClock 的注释中所解释的,初始化语法不能与不可变字典一起使用,因为它需要一个 Add 方法。

The simplest solution is to write a constructor that accepts a mutable IDictionary<TKey, TValue>. Build the mutable dictionary and just pass it to the constructor of your immutable dictionary:

var data = new Dictionary<int, int> { {1, 2}, {2, 4}, {3,1} };
var instance = new ImmutableDic<int, int>(data);

As explained in BoltClock's comment, the initializer syntax can't be used with an immutable dictionary, since it requires an Add method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文