1

私は辞書に1つの問題があります。ちょっとした例:

        Dictionary<int, bool> dict = new Dictionary<int, bool>();
        for (int i = 0; i < 5; i++)
        {
            dict.Add(i, true);
        }
        var dict2 = dict;
        dict2.Clear();

この後、辞書をクリアする必要があります。変化する辞書と不変の辞書が 1 つずつ必要な場合、どうすればよいですか?

4

2 に答える 2

4

参照をコピーするだけでなく、コピーを作成します。

var dict2 = new Dictionary<int, bool>(dict);
于 2013-03-28T08:42:53.503 に答える
2

Dictionaryクラスなので、参照型です。

あなたが書くとき

var dict2 = dict;

実際にはdictdict2を同じ参照に割り当てます。そのため、Clear()メソッドを使用する場合は両方に影響します。それらの参照をコピーする代わりに、それらをコピーする必要があります。お気に入り;

var dict2 = new Dictionary<int, bool>(dict);

C #言語仕様より;

値型の変数にはデータが直接含まれますが、参照型の変数にはデータへの参照が格納されます。後者はオブジェクトと呼ばれます。参照型では、2 つの変数が同じオブジェクトを参照する可能性があるため、1 つの変数に対する操作が、他の変数によって参照されるオブジェクトに影響を与える可能性があります。値型では、変数はそれぞれ独自のデータのコピーを持ち、一方の操作が他方に影響を与えることはできません。

于 2013-03-28T08:44:25.607 に答える