C # le permite especificar parámetros de propiedad en llaves cuando se inicializa el objeto. Esto le permite elegir qué elementos inicializar y cuáles dejar como predeterminados.
Un constructor, por otro lado, ejecuta un solo bloque de código con un conjunto fijo de parámetros. Por lo tanto, para obtener el mismo efecto, tendría que crear múltiples constructores, todos con las diversas combinaciones de propiedades que desee inicializar, lo que podría ser tedioso.
var x = new Person {FirstName="Homer",LastName="Simpson",Age=47};
es exactamente equivalente a esto:
var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;
Excepto que es más corto y posiblemente más fácil para la vista.
También permite construcciones como las que demostró en su pregunta, lo que sería muy tedioso si tuviera que crear variables temporales e inicializarlas como lo hice aquí antes de agregarlas a la lista. (Que es como solía hacerlo). Todo sin requerir un constructor definido explícitamente que tome la lista de parámetros deseada, que puede o no estar disponible.
Además, tenga en cuenta que si bien un constructor puede inicializar propiedades con un setter privado, esta técnica (como debería ser obvio del ejemplo proporcionado) solo funcionará si tiene un setter público para la propiedad. También tenga en cuenta que mi ejemplo abreviado implícitamente llamó al constructor predeterminado (sin parámetros), que por lo tanto tendría que estar presente.