In C #, quando chiami un costruttore, puoi aggiungere uno o più inizializzatori di proprietà in parentesi graffe:
var foo = new Bar() { Armpit = new Flapdoodle() { Limpet = 2 } };
Che cosa succede se questa funzione è stata generalizzata per "impostare le proprietà su un valore restituito":
var baz = foo.Armpit { Limpet = 4 };
Questo sarebbe utile in casi come questo :
var things = coll
.Select(x => {
var a = CreateA(x);
a.Parent = this;
return a;
});
Questo è uno schema comune nella proiezione di collezioni tramite LINQ, ma lo si vede anche altrove: devi dichiarare una variabile locale e aggiungere un po 'di rumore solo per impostare una proprietà su un valore di ritorno prima di passarla a qualcos'altro.
Scrivi
f2(f1());
... ma poi whoops, qualcosa deve cambiare, quindi diventa tre righe:
A a = f1();
a.B = "c";
f2(a);
Sembra che potrebbe essere più bello essere in grado di esprimere lo stesso codice come segue:
var things = coll.Select(x => CreateA(x) { Parent = this } );
f2(f1() { B = "c" });
La mia domanda è questa: è semplicemente non abbastanza utile da curare, o è attivamente una cattiva idea per qualche motivo che è ovvio per il team C # ma non per me?