gpt4 book ai didi

C# 如何判断 IEnumerable 是否可变?

转载 作者:太空狗 更新时间:2023-10-29 17:38:36 24 4
gpt4 key购买 nike

我想要一种方法来更新 IEnumerable 的某些条目。我发现对条目执行 foreach 并更新值失败,因为在后台我正在克隆集合。这是因为我的 IEnumerable 得到了一些 LINQ->SQL 查询的支持。

通过改变获取列表的方法,我改变了这种行为,列表总是可变的,因此该方法改变了列表中的实际对象。除了要求传递 List 之外,还有我可以使用的 Mutable 接口(interface)吗?

    // Will not behave as consistently for all IEnumerables
public void UpdateYesterday (IEnumerable<Job> jobs) {
foreach (var job in jobs.Where(x => x.date == Yesterday)) {
job.done = true;
}
}

...

public class Job {
...
public DateTime Date { get; set; }
}

最佳答案

您在这里根本没有更改 list - 集合本身可能是不可变的,并且此代码仍然“有效”。您正在更改集合中项目中的数据。

想象一排房子 - 这是非常不可变的(创建或摧毁房子很棘手)但您仍然可以更改这些房子的内容。

因此,您真正需要知道的是集合中的元素是否会被克隆...每次您是否会得到一个"new"工作集合执行查询,还是使用现有对象。

关于C# 如何判断 IEnumerable 是否可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856049/

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