c# - ToList()——它会创建一个新列表吗?

标签 c# linq

假设我有一个类

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/

相关文章:

c# - 如何在 Web 应用程序中使用 System.Windows.Forms.WebBrowser?

linq - FluentValidation for WP7 - 验证简单类型​​(字符串)

asp.net-mvc-3 - 将自定义方法集成到 LINQ to Entities 查询中

mysql - 核心数据和 MySQL

c# - 枚举标志负值

c# - 自定义 OWIN CookieAuthenticationProvider 在第一次/冷启动时失败

c# - 如何用 Unicode 转换特殊字符?

c# - 错误 : "No data exists for the row/column" using OdbcDataReader

linq - 通过 linq 选择最后一条记录失败,错误代码为 "method not recognised"

c# - Group By 使用超过两列的 Lambda 表达式