次のコードがあるとします。
List<Category> categories = getCategories();
List<Category> unusedCategories = categories;
foreach (var category in categories)
foreach (var imageCategory in image.Categories)
if (category.CategoryID == imageCategory.CategoryID)
unusedCategories.Remove(category);
ループ中にコレクションが変更されているというエラーが発生しました。確かに、デバッガーをステップ実行したとき、remove(category) が使用された場合、「categories」リストは以前よりも 1 要素短くなりました。「unusedCategories」から削除すると「categories」に影響するのはなぜですか? それらは、同じものを参照するのではなく、2 つの別個のリストである必要があります。.Remove() 関数は値渡しですよね?それで、これはどのように起こりますか?
注: 上記で行っていることに対するプログラムによる代替手段があることは知っており、既に採用しています。なぜこれが起こっているのか興味があります。