web-dev-qa-db-ja.com

C#浅いコピー辞書?

C#で辞書を浅くコピーする必要があります。

例えば:

_Dictionary<int,int> flags = new Dictionary<int,int>();
flags[1] = 2;
flags[2] = 3;
flags[0] = 9001;
Dictionary<int,int> flagsn = flags.MemberwiseClone();
_

残念ながら、「エラーCS1540:保護されたメンバーobject.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary 'にアクセスできません。修飾子は「PointFlagger」タイプであるか、それから派生している必要があります」というエラーが返されます。

これが何を意味するのか完全にはわかりません...辞書を浅くコピーする/上記のコードを修正する別の方法はありますか?

22

浅いコピーを取得するには、_Dictionary<TKey, TValue>_を使用するため、_IEnumerable<KeyValuePair<TKey, TValue>>_のコンストラクターを使用します。このコレクションを新しいインスタンスに追加します。

_Dictionary<int, int> flagsn = new Dictionary<int, int>(flags);
_
45
JaredPar

これは、タイプを明示的に記述する必要がない場合に私が見つけた一般的な方法であり、保守性の理由から私はこれを好みます。

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
10
gatopeich