Per esempio in F # possiamo definirePossiamo accedere alla funzione di copia e aggiornamento F # da C#?
type MyRecord = {
X: int;
Y: int;
Z: int
}
let myRecord1 = { X = 1; Y = 2; Z = 3; }
e di aggiornarlo posso fare
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
Questo è brillante e il fatto che i documenti implementano automaticamente IStructuralEquality senza sforzi aggiuntivi mi fa desiderare per questo nel C#. Tuttavia, forse posso definire i miei record in F #, ma sono comunque in grado di eseguire alcuni aggiornamenti in C#. Immagino un'API come
MyRecord myRecord2 = myRecord
.CopyAndUpdate(p=>p.Y, 10)
.CopyAndUpdate(p=>p.Z, 2)
C'è un modo, e non mi dispiace hack sporco, per implementare CopyAndUpdate come sopra? Il C# signiture per CopyAndUpdate sarebbe
T CopyAndUpdate<T,P>
(this T
, Expression<Func<T,P>> selector
, P value
)
Forse questo sarà utile: http://v2matveev.blogspot.com/2010/05/copy-and-update-in-c.html – desco
possibile duplicato di [C#: come definire un metodo di estensione come "con "in F #?] (http://stackoverflow.com/questions/6832880/c-how-to-define-an-extension-method-as-with-in-f) –