只读字典<int, List<int>>

Read only Dictionary<int, List<int>>

我有一个创建 Dictionary<int, List<int> 的方法,我希望该方法 return 一个 IReadOnlyDictionary<int,IReadOnlyList<int>>

我尝试使用 return Example as IReadOnlyDictionary<int, IReadOnlyList<int>>; 但 return 为 Null

我创建了一个新的 Dictionary<int, IReadOnlyList<int>> Test 并复制了 List AsReadOnly 的所有值,然后 IReadOnlyDictionary<int, IReadOnlyList<int>> Result = Test;

还有什么其他方法可以实现这一点,有比其他方法更好的方法吗?

IReadOnlyDictionary<K, V> 很方便 implemented by ReadOnlyDictionary<K, V>:

Dictionary<int, List<int>> regularDictionary = new Dictionary<int, List<int>>();

var readOnlyDict = new ReadOnlyDictionary<int, List<int>>(regularDictionary);

如果您希望值中的列表也为只读的,那么您必须对这些列表执行与上述字典相同的操作:为每个列表创建一个新的只读集合,然后使用该只读集合类型来引用它。

这段代码看起来像乱码,但如果你将它一段一段地分解,它并没有那么糟糕。我们将分两个阶段进行,以消除恐惧。部分问题是......你给这些东西起什么名字来区分它们?

var regularDictWithReadOnlyCollections= 
    regularDictionary.ToDictionary(kvp => kvp.Key, 
                                   kvp => new ReadOnlyCollection<int>(kvp.Value));

var readOnlyDictOfReadOnlyCollections =
    new ReadOnlyDictionary<int, ReadOnlyCollection<int>>(
        regularDictWithReadOnlyCollections);