2016-03-01 86 views
3

我有一个字典如下:转换字典<TKEY的,列表<TValue>>到ReadOnlyDictionary <TKEY的,ReadOnlyCollection <TValue>>

public enum Role { Role1, Role2, Role3, } 
public enum Action { Action1, Action2, Action3, } 

var dictionary = new Dictionary<Role, List<Action>>(); 

dictionary.Add(RoleType.Role1, new Action [] { Action.Action1, Action.Action2 }.ToList()); 

现在我想能够构造只读字典,其值类型是也只读如下:

var readOnlyDictionary = new ReadOnlyDictionary<Role, ReadOnlyCollection<Action>>(dictionary); 

最后一行显然会导致编译时错误由于TValue类型的差异。

使用List<TValue>也是必要的,因为原始字典是从外部来源编程式填充的。

有没有简单的方法来执行此转换?

+0

你知道吗,集合像列表也可以使用集合初始化器初始化? ; P –

+0

@MatíasFidemraizer:是的。但是我需要在运行时构造只读集合。 –

+0

不,我建议这是因为你从一个数组中创建一个列表... –

回答

4

一种可能性(可能不理想的大集合)将构建所需的类型(使用Enumerable.ToDictionary overload)的新Dictionary对象,并使用List.AsReadOnly() extension这样的:

var readOnlyDictionary = 
    new ReadOnlyDictionary<Role, ReadOnlyCollection<Action>> 
     (dictionary.ToDictionary(k => k.Key, v => v.Value.AsReadOnly())); 
+0

啊!谢谢。 ToDictionary转换效果很好。 –

+0

很高兴答案帮助。 – pasty

相关问题