Здравствуйте, vaa, Вы писали:
vsb>>Ну как минимум лучше тем, что не нарушается принцип DRY. Грубо говоря — ты не сможешь опечататься в коде вида vaa>Ну, если именовать так, то не мудрено.
Здравствуйте, elmal, Вы писали:
vaa>>Может пора провести ревизию и выкинуть ненужное из шарпов? E>В первом случае ты гарантированно не забудешь поставить нужный параметр при создании объекта, ты должен не забыть все элементы конструктора
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, 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 или для инициализации анонимных типов.
А в чем разница? Я думал, что компилятор первый код развернет во второй, т.е будет создана теневая переменная (temp), которая потом присвоится
person. Т.е.
var person = new Person
{
Name = "Alice",
Age = 12
};
развернется компилятором в
var temp = new Person();
temp.Name = "Alice";
temp.Age = 12;
person = temp;
Здравствуйте, fmiracle, Вы писали:
F>Здравствуйте, vaa, Вы писали:
vaa>>>>С другой стороны, инициализатор невозможно отлаживать.
vsb>>>Почему невозможно? vaa>>
vaa>> var x = new O{
vaa>> A = 1,
vaa>> B =2 <= как сюда поставить бряку?
vaa>>};
vaa>>
F>Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.
F>Неудобство тут только в том, что сперва он войдет в свойство A. Но это не "невозможность" отдалки а "некоторое неудобство иногда".
Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. проскакивает инициализацию на ура. никуда при этом не заходит.
Person p = new Person
{
Name = "Alice",
Age = 12
};
Console.WriteLine("Hello, World!");
public class Person
{
public string Name { get; set; }
public uint Age { get; set; }
}
vaa>Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. п
С .net работаю с visual studio, извини
vaa>роскакивает инициализацию на ура. никуда при этом не заходит. vaa>
vaa>Person p = new Person
vaa>{
vaa> Name = "Alice",
vaa> Age = 12
vaa>};
vaa>Console.WriteLine("Hello, World!");
vaa>public class Person
vaa>{
vaa> public string Name { get; set; }
vaa> public uint Age { get; set; }
vaa>}
vaa>
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Sharov, Вы писали:
S>>А в чем разница? S>>Я думал, что компилятор первый код развернет во второй
НС>А если так? НС>
НС>db.Persons.Select(p => new Person { Name = "Alice", Age = 12 });
НС>
db.Persons.Select(p => {
var temp = new Person();
temp.Name = "Alice";
temp.Age = 12;
return temp;
});
Здравствуйте, fmiracle, Вы писали:
F>Здравствуйте, vaa, Вы писали:
vaa>>Ни разу не получается отладка. Еще раз проверил в vs code + net core 6. п
F>С .net работаю с visual studio, извини
vaa>>роскакивает инициализацию на ура. никуда при этом не заходит. vaa>>
vaa>>Person p = new Person
vaa>>{
vaa>> Name = "Alice",
vaa>> Age = 12
vaa>>};
vaa>>Console.WriteLine("Hello, World!");
vaa>>public class Person
vaa>>{
vaa>> public string Name { get; set; }
vaa>> public uint Age { get; set; }
vaa>>}
vaa>>
F>А, собственно, во что ты тут хочешь войти?
Вот как раз в этом случае проблемы нет — поставишь на всю "строку" из 4х строк и отладчик войдет в свойство B без проблем.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, vaa, Вы писали:
vaa>>если это разумно
НС>А если нет?
По ситуации.
Начнем с того, а точно нужен класс с 40 полями?
Ну и сразу же становится ясна культура сишарп разработчика.
вместо того чтобы написать корректный конструктор,
просто запихаем все данные в класс и будем на каждом этапе
валидировать и передавать дальше новую ДТО.
С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс.
и что? копипаста?
Здравствуйте, vaa, Вы писали: vaa>Начнем с того, а точно нужен класс с 40 полями?
А что вы предложите в качестве model для формы с 40 полями? vaa>Ну и сразу же становится ясна культура сишарп разработчика.
? vaa>вместо того чтобы написать корректный конструктор,
Непонятна ложная дилемма. Конструктор Person() вполне себе корректен — порождает новый экземпляр Person со всеми атрибутами, установленными в default.
С чего вы взяли, что корректного конструктора нет? vaa>просто запихаем все данные в класс и будем на каждом этапе vaa>валидировать и передавать дальше новую ДТО.
Не очень понятно, о какой валидации идёт речь, и что там за "каждый этап". vaa>С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс.
Ну да, нужно будет в ещё одном. vaa>и что? копипаста?
А какие варианты? Вы думаете, что вызов конструктора с позиционными аргументами будет чем-то лучше, чем object initializer?
Если вы собрались вызывать конструктор с именованными аргументами, то там "копипасты" будет ровно столько же, как и в object initializer.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, vaa, Вы писали:
vaa>Начнем с того, а точно нужен класс с 40 полями? vaa>Ну и сразу же становится ясна культура сишарп разработчика. vaa>вместо того чтобы написать корректный конструктор, vaa>просто запихаем все данные в класс и будем на каждом этапе vaa>валидировать и передавать дальше новую ДТО. vaa>С другой стороны, да хоть сто, а завтра еще в одном месте нужно будет инициализировать этот класс. vaa>и что? копипаста?
Ты как бы не путай класс с логикой и сложным внутренним состоянием, которое надо правильно конструировать и куда не надо влезать со стороны, и простой ДТО-объект, нужный для передачи данных.
Подветка началась с linq. Вот у нас есть linq-запрос, который выбирает данные для отчета. Каждый dto там представляет строку таблицы отчета, в ней 50 столбцов. Строку надо заполнить при выборке и прочитать при записи в файл/экран. И все. Вот нафига там конструктор?