例如在 F# 中我们可以定义
type MyRecord = {
X: int;
Y: int;
Z: int
}
let myRecord1 = { X = 1; Y = 2; Z = 3; }
并更新它我可以做
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
这太棒了,而且记录自动实现 IStructuralEquality 无需额外努力的事实让我希望在 C# 中实现这一点。但是,也许我可以在 F# 中定义我的记录,但仍然能够在 C# 中执行一些更新。我想像一个API
MyRecord myRecord2 = myRecord
.CopyAndUpdate(p=>p.Y, 10)
.CopyAndUpdate(p=>p.Z, 2)
有没有办法,我不介意肮脏的黑客,来实现 CopyAndUpdate 如上所述?CopyAndUpdate 的 C# 签名将是
T CopyAndUpdate<T,P>
( this T
, Expression<Func<T,P>> selector
, P value
)