如何在列表/数组/可枚举中"change"记录?



我有一个不可变的记录列表,我需要"改变";其中一条记录中的值。当然,这意味着创建一个更改了该值的对象副本,然后引用列表中的新记录而不是旧记录。

我想知道在C#中是否有一些聪明整洁的方法可以做到这一点。到目前为止,我只想到了一个简单的方法:

  1. 获取具有更改值的记录的副本
  2. 在列表中查找记录的索引
  3. 指定新引用

E.g:

var newRecord = oldRecord with { Field = newValue};
var index = list.IndexOf(oldRecord);
list[index] = newRecord;

或者,如果项目不是列表而是可枚举的,则删除项目并放置新项目,例如

看起来dotnet实际上在System.Collections.Immutable内部有许多类。

ImmutableList有一个Replace函数,它将完全满足我的需要。

它还将返回一个新的列表,因为列表本身是不可变的,所以如果不需要这样做,就必须实现一个几乎相同的扩展方法。

最新更新