Можем ли мы получить доступ к функции копирования и обновления 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
)