Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>Здравствуйте, vaa, Вы писали:
vaa>>Здравствуйте, Евгений Акиньшин, Вы писали:
ЕА>>>а такое на старом шарпе написать:
ЕА>>>
ЕА>>>Person SomeMethod() => new() { Name = "Alice", Age = 12 };
ЕА>>>
vaa>>не лучший вариант, на мой взгляд.
ЕА>Ну да, но пришлось же обратную совместимость сохранять. ЕА>Вопрос же про сравнение со старым шарпом,а не с typescript.
согласен.
Person SomeMethod() { var person = new Person(); person.Name = "Alice"; person.Age = 12; return person; }
Здравствуйте, vaa, Вы писали:
vaa>На днях осознал, что инициализация при создании объекта vaa>
vaa>var person = new Person
vaa>{
vaa> Name = "Alice",
vaa> Age = 12
vaa>};
vaa>
vaa>ничем не лучше старого способа: vaa>
vaa>var person = new Person();
vaa> person.Name = "Alice";
vaa> person.Age = 12;
vaa>
vaa>код даже короче. vaa>Может пора провести ревизию и выкинуть ненужное из шарпов?
Во втором случае можем получить частично инициализированный объект Person (например, из-за исключения во втором присваивании), в первом — нет: либо полностью инициализированный объект, либо никакого.
Здравствуйте, vaa, Вы писали:
vaa>На днях осознал, что инициализация при создании объекта vaa>
vaa>var person = new Person
vaa>{
vaa> Name = "Alice",
vaa> Age = 12
vaa>};
vaa>
vaa>ничем не лучше старого способа: vaa>
vaa>var person = new Person();
vaa> person.Name = "Alice";
vaa> person.Age = 12;
vaa>
vaa>код даже короче.
Первый вариант это statement, второй — expression, со всеми вытекающими типа возможности использования в expression tree или для инициализации анонимных типов.
Здравствуйте, jahr, Вы писали:
J>Во втором случае можем получить частично инициализированный объект Person (например, из-за исключения во втором присваивании), в первом — нет: либо полностью инициализированный объект, либо никакого.
Тогда уж лучше явно указать, что персон не всегда создается:
Здравствуйте, vaa, Вы писали:
vaa>Может пора провести ревизию и выкинуть ненужное из шарпов?
В первом случае ты гарантированно не забудешь поставить нужный параметр при создании объекта, ты должен не забыть все элементы конструктора
чтобы объект был проинициализирован, иначе все свалится при компиляции и даже до нее ошибка появится в IDE. Во втором случае забудешь и будет там какой нидь null или вообще левое значение по умолчанию.
В первом случае Person может быть иммутабельным, во втором случае он мутабелен. А если делать иммутабельно, то будут костыли с билдерами что не очень красиво, читаемо, громоздко да еще и медленнее.
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, vaa, Вы писали:
vaa>>Может пора провести ревизию и выкинуть ненужное из шарпов? E>В первом случае ты гарантированно не забудешь поставить нужный параметр при создании объекта, ты должен не забыть все элементы конструктора E>чтобы объект был проинициализирован, иначе все свалится при компиляции и даже до нее ошибка появится в IDE. Во втором случае забудешь и будет там какой нидь null или вообще левое значение по умолчанию.
в первом случае необязательно задавать значения всех полей. и вроде никогда такого не было. Это реализовано в record причем через конструктор.
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, vaa, Вы писали:
vaa>>На днях осознал, что инициализация при создании объекта vaa>>ничем не лучше старого способа: vaa>>код даже короче.
_>
_>fn( new Person(Name="Alice",Age=12) );
_>
это на какой версии? именованные параметры вроде через двоеточие инициализируются.
Здравствуйте, vaa, Вы писали:
vaa>На днях осознал, что инициализация при создании объекта vaa>ничем не лучше старого способа: vaa>код даже короче. vaa>Может пора провести ревизию и выкинуть ненужное из шарпов?
Вопрос же не в короткости кода, а в том что это выражение. Можно например
var res = CallMethod( new Person{ Name = "Test" } );
а появились они, емнип, при внедрении linq, что позволило создавать выражения типа:
var q = from p in data.Persons
where p.Age > 65
select new PersonDto
{
Name = p.Name,
Age = p.Age
};
Здравствуйте, vsb, Вы писали:
vsb>Ну как минимум лучше тем, что не нарушается принцип DRY. Грубо говоря — ты не сможешь опечататься в коде вида
Ну, если именовать так, то не мудрено. vsb>