假设我有以下代码:
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”列表比以前短了一个元素!为什么从“unusedCategories”中删除会影响“categories”?它们应该是两个不同的列表,而不是引用同一事物。.Remove() 函数按值传递,对吗?那么这是怎么发生的呢?
注意:我知道我在上面所做的事情有程序化的替代方案,而且我已经采用了一种。我只是好奇为什么会这样。