不可变的字典<TKey, TValue>

3

如何为不可变的类Dictionary<TKey, TValue>实现构造函数?

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

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

4
编译器将该语法转换为一系列的.Add()方法调用,这意味着需要使用可变字典。 - BoltClock
谢谢!那么,你会如何实现构造函数?也许可以将两个相同长度的数组作为构造函数的参数接收? - Miguel
2个回答

4

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

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

正如BoltClock的评论所解释的那样,初始化语法不能用于不可变字典,因为它需要一个“Add”方法。

2

让构造函数接受一个 IEnumerable<KeyValuePair<TKey, TValue>>

这样,您就可以执行以下操作:

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

你可以使用“new Dictionary”的“最小”添加来构建,也可以使用任何其他方便且产生可枚举序列的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接