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
)