次のように、あるリストから別のリストにオブジェクトを追加できるかどうか疑問に思います。
objectToRemoveList.Add(listOfObjects.ElementAt(i));
次に、次のようにリスト内のすべてのオブジェクトを削除します。
objectToRemoveList.Clear();
オブジェクトがまだそこにあるように見えるので、私は疑問に思います!?
次のように、あるリストから別のリストにオブジェクトを追加できるかどうか疑問に思います。
objectToRemoveList.Add(listOfObjects.ElementAt(i));
次に、次のようにリスト内のすべてのオブジェクトを削除します。
objectToRemoveList.Clear();
オブジェクトがまだそこにあるように見えるので、私は疑問に思います!?
それはうまくいきません。グラフィカルな方法で説明させてください。オブジェクトはメモリのどこかに存在します。
a b c d
リストには、これらの各オブジェクトへの参照listOfObjects
のみが含まれています。
listOfObjects: | | | |
| | | |
v v v v
a b c d
これらの項目のいくつか(たとえばb
、d
)をに追加すると、参照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: | |
から要素を追加する場合listOfObjects
、objectToRemoveList
オブジェクト自体ではなく、オブジェクトへの参照のみをリストに追加します(リストが値型である場合を除き、そうではないようです)。したがって、Clear()
リストの1つを変更した場合でも、他のリストには元のアイテムが含まれています。
はい、インデックスiでアイテムの参照を追加しているため、元のリストのオブジェクトは変更されません。値型がある場合は、コピーが作成されます。
listOfObjects.RemoveAt(i)
元のリストの既知のインデックスからアイテムを削除したい場合は、どうしてですか?