2016-03-01 58 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

相關問題