Czy możemy uzyskać dostęp do funkcji kopiowania i aktualizacji F # z c #?

Na przykład w F # możemy zdefiniować

type MyRecord = {
    X: int;
    Y: int;
    Z: int 
    }

let myRecord1 = { X = 1; Y = 2; Z = 3; }

i zaktualizować to mogę zrobić

let myRecord2 = { myRecord1 with Y = 100; Z = 2 }

To genialne, a fakt, że rekordy automatycznie implementują IStructuralEquality bez dodatkowego wysiłku, sprawia, że ​​życzę sobie tego w języku C #. Jednak być może mogę zdefiniować moje rekordy w F #, ale nadal będę mógł wykonać kilka aktualizacji w C #. Wyobrażam sobie API

MyRecord myRecord2 = myRecord
    .CopyAndUpdate(p=>p.Y, 10)
    .CopyAndUpdate(p=>p.Z, 2)

Czy istnieje sposób i nie mam nic przeciwko hackom implementacji CopyAndUpdate jak wyżej? Będzie to C # signiture dla CopyAndUpdate

T CopyAndUpdate<T,P>
   ( this T
   , Expression<Func<T,P>> selector
   , P value
   )

questionAnswers(3)

yourAnswerToTheQuestion