2016-04-09 11 views
0

I think私はここで何が起こっているのか分かっていますが、私はいくつかの確認をしたいと思います。 (コードは質問の最下部にあります)C#Listはオブジェクトのコンテナではないポインタとして扱われます

私はコピーを作成する必要があるリストオブジェクトを持っています

新規作成同じタイプのリストで、 '='オペランドを使用して、AddRangeメソッドでもテストして同じ結果が得られました。

リストのコピーをどのように操作しても、操作は元のものにも適用されます。

私はC#がオブジェクト/値ではなく参照/ポインタ構造としてリストを使用しているからだと思います。これは正しいです?

temp1.AddRange(list1); 
temp2.AddRange(list2); 


      foreach(record item in temp1) 
      { 
       foreach (KeyValuePair<string, string> itemB in temp2.First().data) 
       { 
        item.data.Add(itemB.Key, null); 
        ERRORDATA = "item data state:" + item.ToString() + "\r\nitemB key:[" + itemB.Key + "] " + itemB.Value; 
       } 
      } 

temp1.First().data.Add("DOOBY", "doo"); 

これが実行した後、それはのみTEMP1オブジェクトにそれを行っている必要があるとき、LIST1はdooby、斗のキー/値のペアを挿入しました。

すべての回答に対する歓声。

+1

はい、 'List 'は参照型であり、値型ではありません。 'x.GetType()。IsValueType'を使用して、オブジェクトに値型セマンティクスがあるかどうかを判断します。主な例外は、value型セマンティクスで動作する参照型である 'System.String'です。 – Enigmativity

+0

"実行可能にコピー&ペースト"するコードを投稿すると非常に便利です。今、それは秘密のクロスワードの手がかりのようです。 – Enigmativity

+0

確認のために乾杯、私はそれが何かのように思ったが、100%確実ではなかった。 – Slipoch

答えて

0

「リスト」temp1に変更を混同しているように見えますが、各リストで保持されているオブジェクトが変更されています。各リストに保持されているオブジェクトはオブジェクトへの参照に過ぎないので、あるリストのオブジェクトに加えられた変更は他のリストにも反映されます。しかし、temp1.Add(o)を実行した場合、oはtemp2に追加されません。

+0

私は指定する必要があります申し訳ありません私はそれぞれのコピーを持っている2つの異なるリストを使用しています。 temp1のオブジェクトに対する変更は、list1のオブジェクトに影響します。だからあなたとEnigmativityは強烈でした。 – Slipoch

関連する問題