我有一个不可变的记录列表,我需要"改变";其中一条记录中的值。当然,这意味着创建一个更改了该值的对象副本,然后引用列表中的新记录而不是旧记录。
我想知道在C#中是否有一些聪明整洁的方法可以做到这一点。到目前为止,我只想到了一个简单的方法:
- 获取具有更改值的记录的副本
- 在列表中查找记录的索引
- 指定新引用
E.g:
var newRecord = oldRecord with { Field = newValue};
var index = list.IndexOf(oldRecord);
list[index] = newRecord;
或者,如果项目不是列表而是可枚举的,则删除项目并放置新项目,例如
看起来dotnet
实际上在System.Collections.Immutable
内部有许多类。
ImmutableList
有一个Replace
函数,它将完全满足我的需要。
它还将返回一个新的列表,因为列表本身是不可变的,所以如果不需要这样做,就必须实现一个几乎相同的扩展方法。