C # consente di specificare i parametri delle proprietà tra parentesi graffe quando l'oggetto viene inizializzato. Ciò consente di scegliere quali elementi inizializzare e quali lasciare come predefiniti.
Un costruttore, d'altra parte, esegue un singolo blocco di codice con un set fisso di parametri. Quindi per ottenere lo stesso effetto dovresti creare più costruttori tutti con le varie combinazioni di proprietà che potresti voler inizializzare, il che potrebbe essere noioso.
var x = new Person {FirstName="Homer",LastName="Simpson",Age=47};
è esattamente equivalente a questo:
var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;
Solo che è più corto e probabilmente più facile per gli occhi.
Permette anche costrutti come hai dimostrato nella tua domanda, il che sarebbe molto noioso se dovessi creare variabili temporanee e inizializzarle come ho fatto qui prima di aggiungerle all'elenco. (È così che dovevi farlo.) Il tutto senza richiedere un costruttore esplicitamente definito che prenda l'elenco di parametri desiderato, che può essere o non essere disponibile.
Inoltre, nota che mentre un costruttore può inizializzare le proprietà con un setter privato, questa tecnica (come dovrebbe essere ovvio dall'esempio fornito) funzionerà solo se hai un setter pubblico per la proprietà. Nota anche che il mio esempio abbreviato ha implicitamente chiamato il costruttore predefinito (senza parametri), che quindi dovrebbe essere presente.