14

次のような辞書があります。

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>元のディクショナリは外部ソースからプログラムによって入力されるため、a の使用も必要です。

この変換を実行する簡単な方法はありますか?

4

3 に答える 3

11

1 つの可能性 (おそらく大規模なコレクションには最適ではない) は、( Enumerable.ToDictionary オーバーロードDictionaryを使用して) 目的の型の新しいオブジェクトを構築し、次のようにList.AsReadOnly() 拡張機能を使用することです。

var readOnlyDictionary = 
    new ReadOnlyDictionary<Role, ReadOnlyCollection<Action>>
        (dictionary.ToDictionary(k => k.Key, v => v.Value.AsReadOnly()));
于 2016-03-01T21:51:46.323 に答える