-1

次のように、あるリストから別のリストにオブジェクトを追加できるかどうか疑問に思います。

objectToRemoveList.Add(listOfObjects.ElementAt(i));

次に、次のようにリスト内のすべてのオブジェクトを削除します。

objectToRemoveList.Clear();

オブジェクトがまだそこにあるように見えるので、私は疑問に思います!?

4

3 に答える 3

6

それはうまくいきません。グラフィカルな方法で説明させてください。オブジェクトはメモリのどこかに存在します。

  a     b     c     d

リストには、これらの各オブジェクトへの参照listOfObjectsのみが含まれています。

listOfObjects:  |     |     |     |     
                |     |     |     |     
                v     v     v     v     
                a     b     c     d

これらの項目のいくつか(たとえばbd)をに追加すると、参照objectToRemoveListも追加されるだけです。

listOfObjects:  |     |     |     |     
                |     |     |     |     
                v     v     v     v     
                a     b     c     d
                      ^           ^
                      |           |
objToRemoveLst:       |           |

を実行するobjectToRemoveList.Clearと、そこにあるすべての参照が削除されます。listOfObjects完全に影響を受けていないことに注意してください。

listOfObjects:  |     |     |     |     
                |     |     |     |     
                v     v     v     v     
                a     b     c     d


objToRemoveLst:       

やりたいことを達成するために、次のループを使用できます。

foreach (object o in objectToRemoveList) {
    listOfObjects.Remove(o);
}

そうすれば、参照は実際にから削除されlistOfObjectsます。これはあなたが望むものです:

listOfObjects:  |           |           
                |           |           
                v           v           
                a     b     c     d
                      ^           ^
                      |           |
objToRemoveLst:       |           |
于 2012-07-18T18:05:28.370 に答える
2

から要素を追加する場合listOfObjectsobjectToRemoveListオブジェクト自体ではなく、オブジェクトへの参照のみをリストに追加します(リストが値型である場合を除き、そうではないようです)。したがって、Clear()リストの1つを変更した場合でも、他のリストには元のアイテムが含まれています。

于 2012-07-18T18:05:21.833 に答える
2

はい、インデックスiでアイテムの参照を追加しているため、元のリストのオブジェクトは変更されません。値型がある場合は、コピーが作成されます。

listOfObjects.RemoveAt(i)元のリストの既知のインデックスからアイテムを削除したい場合は、どうしてですか?

于 2012-07-18T18:08:17.993 に答える