Чего-то я вдруг на ровном месте засомневался
Есть код
var a = new class1
{
Property1 = new class2(),
Property2 = false
};
Это тоже самое, что и
var a = new class1()
{
Property1 = new class2(),
Property2 = false
};
В обоих случаях создается экземпляр класса class1 и инициализируются поля Property1 и Property2
Или есть нюансы?
Можно.
Поставьте решарпер, он бы в этом месте подсказку выдал, что скобки можно опустить.
Здравствуйте, Michael7, Вы писали:
M>Чего-то я вдруг на ровном месте засомневался
M>Или есть нюансы?
РеШарпер редко, но предлагает такое "опустить", после которого код не компилируется:
using System;
class Program
{
static void Main() {
var x = DateTime.Now.Day > 10 ? 1 : new Program() ?? default(object);
// ^ вот это вот ^
// но в 10.1 это вроде как обещают поправить.
}
}
А смотреть нужно в спеку 7.6.10.1 Object creation expressions (C# Language Specification Version 5.0):
object-creation-expression:
new type ( argument-listopt ) object-or-collection-initializeropt
new type object-or-collection-initializer
И ниже (выделение моё):
An object creation expression can omit the constructor argument list and enclosing parentheses provided it includes an object initializer or collection initializer. Omitting the constructor argument list and enclosing parentheses is equivalent to specifying an empty argument list.