|
Nullable reference types
|
|||
---|---|---|---|
#18+
Используете ли вы сабж? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 05:33 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Да... Что-то мне все больше кажется, что вся эта шляпа с nullable-ами, что автары в МС затеяли, на самом деле, бесполезна чуть более, чем совсем. Уже так не кажется? Мне вот пока всё кажется так, как в цитате. Поэтому не использую. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 06:21 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Уже так не кажется? Да, как-то все-таки стал использовать и в итоге наконец понравилось. Просто, похоже, поначалу некоторые вещи недопонимал. Была еще одна засада связанная со встроенным CA (даже не знаю, встроенным, или FxCop-овским, который я тоже все время использую), который некоторые случаи наллов тоже проверяет. Лечится отключением ворнинга CA1062. Популярность сабжа интересует потому что если продавить в проекте везде его использовать, то можно наконец-то избавиться от всех этих бесконечных null-check. Сейчас тут есть класы, где половина кода это null-checks, плюс из-за них становится невозможно нормально использовать expression синтаксис для методов, что тоже код никак не сокращает. И в C# 9, кажется, уже обещают возможность автоинжекта нуллчека для параметров, которые не помечены как nullable. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 07:40 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Перевели один проект за пол года полностью на null references, варнинги переключили в ошибки. Остальные в процессе. При чём не только на уровне compile checking, но и при работе с интерфейсами и валидацией. ASP.NET Core отлично с этим работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 12:43 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt варнинги переключили в ошибки. Зачетно. Тоже давно думаю продавить эту тему. А то, похоже, среди разрабов смотреть в ворнинги, а тем более фиксить их давно уже моветон. В очередной раз разгребая гору чужого гуано из пары с лишним сотен ворнингов почти сразу нашел два бага. В конструкторе вместо Foo = foo стояло foo = foo. Свойство просто не инициализировалось. Если бы все неряхи сразу все подметали за собой, то это бы сразу же вслыло, а не ждало бы, когда QA отпингует билд назад или, еще хуже, когда продакшен заглючит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 13:01 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat, К сожалению не всё так гладко :) Пока не будут доступны record-ы с init полями, приходится втыкать много мусора типа Код: c# 1. 2. 3.
Или выносить в конструкторы, что конечно зачастую сказывается благотворно. Поэтому прям полной поддержки на том уровне, на котором это требуется для работы NR пока нет. Большая надежда на C#9. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 13:16 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt, Ну я сейчас не парюсь и просто пишу "public string? Blabla" По моей логике оно ведь может быть нулл, да может, значит его и следует объявлять как "?". Тема еще в том, что всегда ведь потом можно применить оператор "!", который в переводе на албанский означает "я точно знаю и мамой клянусь, что эта переменная здесь не нулл". Например: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 13:34 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt, Это не оно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
(Это девятка, пару дней назад поставил уже себе превью :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 23:38 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Вот еще очень понравилось: Код: c# 1. 2.
Короче, надо уже на него переползать, я думаю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 23:56 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat Ну я сейчас не парюсь и просто пишу "public string? Blabla" По моей логике оно ведь может быть нулл, да может, значит его и следует объявлять как "?". Тема еще в том, что всегда ведь потом можно применить оператор "!", который в переводе на албанский означает "я точно знаю и мамой клянусь, что эта переменная здесь не нулл". Ну вот проблема: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
т.е. никакой защиты на уровне компилятора нет, никаких гарантий, что в объекте Some свойство Prop1 гарантировано не будет содержать null :( fkthat Это не оно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
(Это девятка, пару дней назад поставил уже себе превью :) Да, оно. Здесь ты уже обязан указать значения полей и сделать это правильно. fkthat Вот еще очень понравилось: Код: c# 1. 2.
Короче, надо уже на него переползать, я думаю :) Дык сказка для функциональщиков :) При чём в F# это давно есть ... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2020, 15:50 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt т.е. никакой защиты на уровне компилятора нет, никаких гарантий, что в объекте Some свойство Prop1 гарантировано не будет содержать null :( Так он же тебе еще на определении класса ворнинг выдаст ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2020, 17:58 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
А так-то оно понятно, что оно в принципе ни от чего не защищает, это просто ворнинг и его можно прагмой отключить, или использовать "!". Тут как с модификатором "new" для метода, который на результат компиляции никак не влияет, но компилер заставляет тебя явно сказать, что ты знаешь, что делаешь, а не просто опечатался. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2020, 18:14 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat Так он же тебе еще на определении класса ворнинг выдаст этот ворнинг подавляется с помощью = default! :) всё по рекомендациям Microsoft... fkthat А так-то оно понятно, что оно в принципе ни от чего не защищает, это просто ворнинг и его можно прагмой отключить, или использовать "!". Тут как с модификатором "new" для метода, который на результат компиляции никак не влияет, но компилер заставляет тебя явно сказать, что ты знаешь, что делаешь, а не просто опечатался. К сожалению свойства класса инициализируются значениями по умолчанию, если только не переопределить это поведение в конструкторе. А для DTO, например, так сделать нельзя.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2020, 22:36 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt К сожалению свойства класса инициализируются значениями по умолчанию, если только не переопределить это поведение в конструкторе. А для DTO, например, так сделать нельзя.. А ты знаешь, кстати, core MVC из коробки спокойно делает binding не только по свойствам, но и по параметрам конструктора. Я об этом сам узнал только полгода назад. Сейчас проверил на records - все ok, binding работает. Код: c# 1. 2. 3. 4. 5. 6.
Код: c# 1. 2. 3. 4. 5.
Но как при этом с attribute-based validation пока что не проверял. С DTO еще может быть проблема с десериализацией из JSON, подумал, вот, на досуге над этим поработать - пожалуй, совсем не так уж сложно написать custom converter для этого :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 14:10 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat А ты знаешь, кстати, core MVC из коробки спокойно делает binding не только по свойствам, но и по параметрам конструктора. Я об этом сам узнал только полгода назад. Сейчас проверил на records - все ok, binding работает. Ну по идее должон поддерживать :) Я не ждал этого так быстро, хотя рекорды по факту те же классы. fkthat С DTO еще может быть проблема с десериализацией из JSON, подумал, вот, на досуге над этим поработать - пожалуй, совсем не так уж сложно написать custom converter для этого :)) По идее тоже должно поддерживаться, либо не за горами, иначе будет феил.. fkthat Это вообще БОМБА! Оно даже понимает, что туда null нельзя! Ага, у нас уже давно юзается эта фича ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 14:35 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt, Validation attributes тоже понимает. Правда такая тема - как только добавляешь к параметру аттрибут, так он начинает ругаться что этот параметр unused, а без аттрибута все ок - похоже, просто какой-то баг preview. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:10 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt По идее тоже должно поддерживаться, либо не за горами, иначе будет феил.. Супер! Я обнаружил, что в IL свойства record компилируются в public свойства. Т.е. для них будут работать и serialization, и Automapper, и ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 05:02 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat Супер! Я обнаружил, что в IL свойства record компилируются в public свойства. Т.е. для них будут работать и serialization, и Automapper, и ORM. Интересно, а Fody/PropertyChanged в таком случае может быть натравлен на record? Мда, пардон, рекорды же иммутабельны, использовать с ними INPC смысла не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 06:20 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Мда, пардон, рекорды же иммутабельны, использовать с ними INPC смысла не имеет. Лично я в секте Свидетелей Иммутабельности Все, что может быть сделано иммутабельным, должно делаться иммутабельным, поэтому для меня эта фича C#прямо-таки праздник ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 11:13 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
fkthat Лично я в секте Свидетелей Иммутабельности Все, что может быть сделано иммутабельным, должно делаться иммутабельным, поэтому для меня эта фича C#прямо-таки праздник Я тоже того же мнения, только почему тогда на скриншотике выше сеттеры свойств открытые? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 11:20 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Я тоже того же мнения, только почему тогда на скриншотике выше сеттеры свойств открытые? А это не исходный код на C#, это декомпиляция сборки. Т.е. на уровне IL свойство открытое, но на уровне C# компилятор не даст тебе написать код записи в это свойство. Похоже, задумка крутая, т.к., например, будет работать та же десериализация JSON и проч. Так-то иммутабельный класс и так можно сделать через private set, но тогда, например, сразу прощай JSON и прощайте ORMы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 13:18 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Мда, пардон, рекорды же иммутабельны, использовать с ними INPC смысла не имеет. Инит-поля можно заполнять на этапе создания. То, что нужно для маппинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 15:23 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Я тоже того же мнения, только почему тогда на скриншотике выше сеттеры свойств открытые? Я полагаю это особенность компиляции, с обвесом в виде атрибутов, они будут как-то закрыты... Но я пока не копал в эту тему, но хотелось бы без трешачка в виде пол сотни оговорок, конечно же :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 15:24 |
|
Nullable reference types
|
|||
---|---|---|---|
#18+
hVostt Я полагаю это особенность компиляции, с обвесом в виде атрибутов, они будут как-то закрыты... Но я пока не копал в эту тему, но хотелось бы без трешачка в виде пол сотни оговорок, конечно же :) Суть вот в чем, как я понял. Они компилируются в public, но при этом в исходном коде ничего нельзя туда писать. Это супер. Потому что Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
На самом деле очень логично, потому что не важно как происходит инициализация - конструктором, десериализацией или mapping-ом из ORM, главное, что она происходит при этом только при создании объекта, а потом он уже immutable (в рамках кода C#). С init-only свойствами такое уже, похоже не прокатит, хотя надо проверить, а с records от души. Тут только вот одна тема, которая для меня не очень ясна и надо будет сделать research. Я при декомпиляции не вижу у этого класса никаких маркеров (например аттрибутов), что это record и мне непонятно, если я использую этот класс в готовой сборке из другого проекта, то как C# узнает, что в его свойства писать нельзя. Он же будет видеть их как public. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 20:13 |
|
|
start [/forum/topic.php?fid=20&fpage=8&tid=1398450]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 417ms |
0 / 0 |