Какой из них является правильным синтаксисом при инициализации объектов? Все образцы работают, но я не знаю, какой и когда использовать каждый синтаксис. Я всегда использую Синтаксис 1. Имеет ли использование этого синтаксиса какие-либо преимущества перед другими синтаксисами?
public class X {
public string Y { get; set; }
}
// Syntax 1
var z = new X () { Y = "Sample Text" };
// Syntax 2
var z = new X { Y = "Sample Text" };
// Syntax 3
var z = new X();
z.Y = "Sample Text";
Я использую тот, который имеет наименьшее количество символов, если он читаем. Я бы сказал, просто выберите тот, который вы предпочитаете, и придерживайтесь его (т.е. будьте последовательны)





Все они имеют «правильный» (и допустимый) синтаксис. Выберите свой любимый
Первые 2 примера используют Инициализаторы объектов
Инициализаторы объектов и коллекций (Руководство по программированию на C#)
Object initializers let you assign values to any accessible fields or properties of an object at creation time without having to invoke a constructor followed by lines of assignment statements.
Третий — сначала конструирует объект и назначает свойство Y на отдельном шаге.
--
Скомпилированный IL в форму инициализатора
IL_0000: newobj instance void C/X::.ctor()
IL_0005: dup
IL_0006: ldstr "Sample Text"
IL_000b: callvirt instance void C/X::set_Y(string)
IL_0010: pop
Скомпилированный IL для явного объявления
IL_0000: newobj instance void C/X::.ctor()
IL_0005: ldstr "Sample Text"
IL_000a: callvirt instance void C/X::set_Y(string)
Разница (в этом примере) заключается в том, что dup и pop вне стека.
В общем особой разницы нет
Синтаксис1 и Синтаксис2 одинаковы. По сути, между всеми тремя нет разницы в производительности. Это просто синтаксический сахар для использования инициализаторов объектов. Вы можете использовать любой из трех. Это просто то, как вы пишете свой код