2011-03-25 83 views
1

你将如何实现一个不可改变的类似Dictionary<TKey, TValue>的构造函数?不可变的字典<TKey,TValue>

此外,是否有可能让用户在使用的语法:

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

该语法由编译器翻译为一系列'.Add()'调用。这意味着需要一个可变的字典。 – BoltClock 2011-03-25 00:45:35

+0

谢谢!那么,你将如何实现构造函数?也许接收两个相同长度的数组作为构造函数的参数? – Miguel 2011-03-25 00:46:40

回答

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

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

这种方式,你可以这样做:

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

你可以用“最小的”加法“新词典”的构建,你也可以使用即方便又产生这样的枚举序列的任何其它方式。

相关问题