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

Log*_*gan 9 c# ienumerable mutable

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

通过更改方法以获取List我已经更改了此行为,Lists总是可变的,因此该方法更改列表中的实际对象.而不是要求传递List是否有可以使用的Mutable接口?

    // 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; }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 15

你根本就没有更改列表 - 集合本身可能是不可变的,这段代码仍然可以"正常工作".您正在更改集合中项目的数据.

想象一排房子 - 这是不可改变的(创造或摧毁房子是棘手的)但你仍然可以改变这些房屋的内容.

所以,你真正需要知道的是,集合的元素是否将被克隆......每次执行查询时是否会获得"新"作业的集合,或者它是否会使用现有的对象.