根据List(T)
类http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx的文档,一个集合支持多个读者。只要不修改集合。
我的问题是什么时候修改了一个集合?
List<int>
,intList[0] = 1;
intList.add(1);
感谢您的帮助。
保
答案 0 :(得分:2)
对于列表,当您从数组中添加或删除元素时,它会被视为已修改,或者您更改了元素的内容,因此您的示例都确实“修改”了该集合。
但作为旁注:对于数组,在这种情况下,你实际上无法“修改”集合。
所以我们在List<T>
和T的普通数组之间的行为有明显的区别。
例如,此代码抛出异常:
var testList = Enumerable.Range(1, 10).ToList();
foreach (var i in testList)
{
testList[0] = 1;
}
但是这段代码不抛出异常:
var testArray = Enumerable.Range(1, 10).ToArray();
foreach (var i in testArray)
{
testArray[0] = 1;
}
更改元素中存储的引用类型的属性
请注意,如果您有一个引用类型的列表,并且您更改了其中一个列表元素的属性之一,则不计为修改集合。
例如,给定这个类:
class Element
{
public int Value
{
get;
set;
}
}
以下代码不会引发异常:
List<Element> list = new List<Element>()
{
new Element(),
new Element()
};
foreach (var element in list)
{
list[0].Value = 1;
}
它不计入修改集合的原因是您没有更改元素的内容,因为引用本身保持完全相同。
答案 1 :(得分:2)
我的问题是什么时候修改了一个集合?
当我更改列表中的值时?例如
List<int>, intList[0] = 1;
是的,更改项目确实会改变集合。
但是,如果您T
的{{1}}是引用类型,并且您没有更改整个对象(例如,只更改一个类属性值),则不会修改该集合。例如考虑具有List<T>
属性Foo
的<{1}}课程。
int
以下代码 修改集合:
Bar
以下不修改集合:
List<Foo> items = new List<Foo> { new Foo(), new Foo() };
当我添加/删除列表中的某些内容时?例如,intList.add(1);
它总是修改集合。