假设我有一个类
public class MyObject
{
public int SimpleInt{get;set;}
}
我有一个 List<MyObject>
, 和我 ToList()
然后更改其中一个 SimpleInt
,我的更改是否会传播回原始列表。换句话说,以下方法的输出是什么?
public void RunChangeList()
{
var objs = new List<MyObject>(){new MyObject(){SimpleInt=0}};
var whatInt = ChangeToList(objs );
}
public int ChangeToList(List<MyObject> objects)
{
var objectList = objects.ToList();
objectList[0].SimpleInt=5;
return objects[0].SimpleInt;
}
为什么?
P/S:很抱歉,如果发现起来很明显。但是我现在没有编译器...
最佳答案
是的,ToList
将创建一个新列表,但是因为在这种情况下 MyObject
是一个引用类型,所以新列表将包含对与原始对象相同的对象的引用列表。
更新新列表中引用的对象的 SimpleInt
属性也会影响原始列表中的等效对象。
(如果 MyObject
被声明为 struct
而不是 class
那么新列表将包含原始列表中元素的副本,并且更新新列表中元素的属性不会影响原始列表中的等效元素。)
关于c# - ToList()——它会创建一个新列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2774099/