只读字典<int,list <int =“”>&gt;

时间:2017-11-30 18:43:12

标签: c# .net-3.5

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

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

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

实现这一目标的其他方法是什么?有一种方法比其他方法更好?

1 个答案:

答案 0 :(得分:3)

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);

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

这段代码看起来很糟糕,但如果你把它分解成碎片就不会那么糟糕。我们将在两个阶段进行,以消除恐怖。问题的一部分是......你用什么来命名这些东西来区分它们?

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

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