你将如何实现一个不可改变的类似Dictionary<TKey, TValue>
的构造函数?不可变的字典<TKey,TValue>
此外,是否有可能让用户在使用的语法:
ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };
你将如何实现一个不可改变的类似Dictionary<TKey, TValue>
的构造函数?不可变的字典<TKey,TValue>
此外,是否有可能让用户在使用的语法:
ImmutableDic<int, int> Instance = new ImmutableDic<int, int> { {1, 2}, {2, 4}, {3,1} };
最简单的办法是写一个接受可变IDictionary<TKey, TValue>
构造。构建可变字典,只是把它传递给你的不变字典的构造函数:
var data = new Dictionary<int, int> { {1, 2}, {2, 4}, {3,1} };
var instance = new ImmutableDic<int, int>(data);
正如BoltClock的评论解释,初始化语法不能用一成不变的词典使用,因为它需要一个Add
方法。
让构造函数接受IEnumerable<KeyValuePair<TKey, TValue>>
。
这种方式,你可以这样做:
var Instance = new ImmutableDic<int, int>(
new Dictionary<int, int> {1, 2}, {2, 4}, {3,1} });
你可以用“最小的”加法“新词典”的构建,你也可以使用即方便又产生这样的枚举序列的任何其它方式。
该语法由编译器翻译为一系列'.Add()'调用。这意味着需要一个可变的字典。 – BoltClock 2011-03-25 00:45:35
谢谢!那么,你将如何实现构造函数?也许接收两个相同长度的数组作为构造函数的参数? – Miguel 2011-03-25 00:46:40