2017-11-30 19 views
1

Dictionary<int, List<int>を作成するメソッドがあり、メソッドでIReadOnlyDictionary<int,IReadOnlyList<int>>を返すようにします。読み取り専用ディクショナリ<int、List <int>>

私はreturn Example as IReadOnlyDictionary<int, IReadOnlyList<int>>;と試みたが、ヌル

を返す私はそれが新しいDictionary<int, IReadOnlyList<int>> Testを作成し、リストAsReadOnlyのすべての値をコピーして IReadOnlyDictionary<int, IReadOnlyList<int>> Result = Test;

これを達成するための他の方法は何であり、1がありましたそれは他のものより優れていますか?

答えて

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

あなたが値のリストが同様に読み取り専用になりたい場合は、あなたは上記の辞書で行ったこれらのリストと同じことを行う必要があるでしょう:それぞれの新しい読み取り専用コレクションを作成し、その読み取り専用コレクションタイプを使用して参照します。

このコードはひどいガレージのように見えますが、それを少しずつ分割するとそれほど悪くはありません。恐怖を消すために2段階でやります。問題の一部は、それらを区別するためにこれらの名前を何と名付けますか?

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

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

申し訳ありませんが、私はコピー@DanielEsp – DanielEsp

+0

私がしようとしたが、それは抽象クラスのインスタンスまたはインタフェースのSystem.Collections.Generic.IReadOnlyDictionary > 'を作成できません示してい間違ったこと - 私は今得たことを試してください。 –

+0

@DanielEspアップデートを参照してください。 –

関連する問題