不可变字典<tkey,tvalue =“”> </tkey,>

时间:2011-03-25 00:44:07

标签: c# dictionary immutability

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

这样,你可以这样做:

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

您可以使用“新词典”的“最小”添加进行构建,您还可以使用任何其他方便的方法并生成这样的可枚举序列。