gpt4 book ai didi

c# - 为什么 IEnumerable.ToList 会产生新的对象

转载 作者:太空狗 更新时间:2023-10-29 22:08:07 26 4
gpt4 key购买 nike

public class TestClass
{
public int Num { get; set; }
public string Name { get; set; }
}

IEnumerable<TestClass> originalEnumerable
= Enumerable.Range(1, 1).
Select(x => new TestClass() { Num = x, Name = x.ToString() });

List<TestClass> listFromEnumerable = originalEnumerable.ToList();

// false
bool test = ReferenceEquals(listFromEnumerable[0], originalEnumerable.ElementAt(0));

如果我修改复制的对象,原始对象不会改变。

据我了解System.Linq.IEnumerable<T>调用 ToList() 时,集合总是会产生新对象,即使它们是引用类型也是如此/ToArray() ?我是否遗漏了一些东西,因为其他 SO 问题坚持只复制引用。

最佳答案

实际上,这是错误的原因是因为您的可枚举实际上被枚举了 两次,一次是在调用 originalEnumerable.ToList() 时,第二次是在您调用originalEnumerable.ElementAt(0)

由于它枚举了两次,因此每次枚举时都会创建新对象。

关于c# - 为什么 IEnumerable.ToList 会产生新的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21920892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com