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
   )

questionAnswers(3)

yourAnswerToTheQuestion