只读字典<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);
我有一个创建 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);