如何为类不可变的Dictionary<TKey, TValue>
实现构造函数?
此外,是否可以允许用户使用语法:
ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };
答案 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} });
您可以使用“新词典”的“最小”添加进行构建,您还可以使用任何其他方便的方法并生成这样的可枚举序列。