【问题标题】:Immutable Dictionary<TKey, TValue>不可变字典<TKey, TValue>
【发布时间】:2011-03-25 00:44:06
【问题描述】:

您将如何为不可变的Dictionary&lt;TKey, TValue&gt; 类实现构造函数?

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

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

【问题讨论】:

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

标签: c# dictionary immutability


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    让构造函数接受IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;

    这样,你可以做到:

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

    你可以用“新字典”的“最小”添加来构造,也可以使用任何其他方便的方式来生成这样一个可枚举的序列。

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多