Podemos ter acesso ao recurso de cópia e atualização do F # do c #?
Por exemplo, em F # podemos definir
type MyRecord = {
X: int;
Y: int;
Z: int
}
let myRecord1 = { X = 1; Y = 2; Z = 3; }
e para atualizá-lo eu posso fazer
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
Isso é brilhante e o fato de que os registros implementam automaticamente a IStructuralEquality sem nenhum esforço extra me faz desejar isso em C #. No entanto talvez eu possa definir meus registros em F #, mas ainda ser capaz de realizar algumas atualizações em c #. Eu imagino uma API como
MyRecord myRecord2 = myRecord
.CopyAndUpdate(p=>p.Y, 10)
.CopyAndUpdate(p=>p.Z, 2)
Existe uma maneira, e eu não me importo com hacks sujos, para implementar CopyAndUpdate como acima? A assinatura C # para CopyAndUpdate seria
T CopyAndUpdate<T,P>
( this T
, Expression<Func<T,P>> selector
, P value
)