如何 "change" 列表/数组/可枚举中的记录?
How to "change" a record inside a list / array / enumerable?
我有一个不可变的记录列表,我需要“更改”其中一个记录中的值。这当然意味着创建一个更改了该值的对象的副本,然后引用新记录而不是列表中的旧记录。
我想知道在 C# 中是否有一些聪明而巧妙的方法来完成它。到目前为止我只想到了一个简单的方法:
- 获取具有更改值的记录的副本
- 查找记录在列表中的索引
- 分配新参考
例如:
var newRecord = oldRecord with { Field = newValue};
var index = list.IndexOf(oldRecord);
list[index] = newRecord;
或者删除一个项目并放置一个新项目,如果它不是列表而是一个可枚举的,例如
看起来 dotnet
实际上有 类 个 System.Collections.Immutable
。
ImmutableList
有一个 Replace
函数可以满足我的需要。
它也会 return 一个新的列表,因为列表本身是不可变的,所以如果不需要的话,必须只实现一个扩展方法,它的作用大致相同。
我有一个不可变的记录列表,我需要“更改”其中一个记录中的值。这当然意味着创建一个更改了该值的对象的副本,然后引用新记录而不是列表中的旧记录。
我想知道在 C# 中是否有一些聪明而巧妙的方法来完成它。到目前为止我只想到了一个简单的方法:
- 获取具有更改值的记录的副本
- 查找记录在列表中的索引
- 分配新参考
例如:
var newRecord = oldRecord with { Field = newValue};
var index = list.IndexOf(oldRecord);
list[index] = newRecord;
或者删除一个项目并放置一个新项目,如果它不是列表而是一个可枚举的,例如
看起来 dotnet
实际上有 类 个 System.Collections.Immutable
。
ImmutableList
有一个 Replace
函数可以满足我的需要。
它也会 return 一个新的列表,因为列表本身是不可变的,所以如果不需要的话,必须只实现一个扩展方法,它的作用大致相同。