Можем ли мы получить доступ к функции копирования и обновления F # из c #?

Например, в 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, как указано выше? Подпись C # для CopyAndUpdate будет

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

Ответы на вопрос(3)

Ваш ответ на вопрос