Подтвердить что ты не робот

Что называется шаблоном инициализатора объекта?

Я просматриваю некоторый код с шаблоном инициализации объекта, который я не узнаю, - может ли кто-нибудь сказать мне, что называется этим шаблоном (и где найти документацию по использованию)?

obj.myType = (myVar = new MyType());

В случае, если это имеет значение, конкретный прецедент выглядит следующим образом:

protected MyType myVar;
protected readonly MyComplexType myComplexType;

protected void Page_Init(object sender, EventArgs e)) {
    ...
    myComplexType.myType = (myVar = new MyType());
    ...
}
4b9b3361

Ответ 1

Он просто присваивает одно и то же значение дважды - один раз - myVar и один раз - myComplexType.myType.

Это эквивалентно

var tmp = new MyType();
myVar = tmp;
myComplexType.myType = tmp;

(В некоторых сложных случаях могут происходить преобразования типов, но я не ожидаю, что в этом конкретном случае они будут.)

Конечно, вам не нужно использовать дополнительную локальную переменную. Этот код "несколько эквивалентен", но включает чтение из myVar, поэтому он не совсем эквивалентен, но скорее всего будет тем, что вы будете использовать:

myVar = new MyType();
myComplexType.myType = myVar;

Нет конкретного имени для этого, и относительно редко использовать результат назначения в другом месте выражения, причем наиболее распространенным примером является:

string line;
while ((line = reader.ReadLine()) != null)
{
    ...
}