Können wir von c # auf die F # -Kopier- und Aktualisierungsfunktion zugreifen?

Zum Beispiel können wir in F # definieren

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

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

und um es zu aktualisieren kann ich tun

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

Das ist großartig, und die Tatsache, dass Datensätze IStructuralEquality ohne zusätzlichen Aufwand automatisch implementieren, lässt mich dies in C # wünschen. Vielleicht kann ich meine Datensätze in F # definieren, aber dennoch einige Aktualisierungen in C # durchführen. Ich stelle mir eine API vor

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

Gibt es eine Möglichkeit, und ich habe nichts dagegen, schmutzige Hacks, CopyAndUpdate wie oben zu implementieren? Die C # Signatur für CopyAndUpdate wäre

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage