小编典典

ToList()-是否创建一个新列表?

c#

假设我有一堂课

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:很抱歉,如果发现的话。但是我现在没有编译器了…


阅读 512

收藏
2020-05-19

共1个答案

小编典典

是的,ToList将创建一个新列表,但是由于在这种情况下MyObject是引用类型,因此新列表将包含对与原始列表相同的对象的引用。

更新SimpleInt新列表中引用的对象的属性也会影响原始列表中的等效对象。

(如果MyObject声明为struct而不是,class则新列表将包含原始列表中元素的副本,并且更新新列表中元素的属性 不会
影响原始列表中的等效元素。)

2020-05-19