假设我有一堂课
public class MyObject { public int SimpleInt{get;set;} }
我有一个List<MyObject>,ToList()然后将其更改为一个,然后SimpleInt将更改传播回原始列表。换句话说,以下方法的输出是什么?
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是引用类型,因此新列表将包含对与原始列表相同的对象的引用。
ToList
MyObject
更新SimpleInt新列表中引用的对象的属性也会影响原始列表中的等效对象。
(如果MyObject声明为struct而不是,class则新列表将包含原始列表中元素的副本,并且更新新列表中元素的属性 不会 影响原始列表中的等效元素。)
struct
class