Например, в 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 без каких-либо дополнительных усилий, заставляет меня хотеть этого в С#. Однако, возможно, я могу определить свои записи в F #, но все же смогу выполнить некоторые обновления на С#. Я предполагаю, что API, как
MyRecord myRecord2 = myRecord
.CopyAndUpdate(p=>p.Y, 10)
.CopyAndUpdate(p=>p.Z, 2)
Есть ли способ, и я не против грязных хаков, чтобы реализовать CopyAndUpdate, как указано выше? Значением С# для CopyAndUpdate будет
T CopyAndUpdate<T,P>
( this T
, Expression<Func<T,P>> selector
, P value
)