|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
||||||
Оптимально ли использовать методы расширения для проверки на null?15.05.2017, 15:33. Показов 2606. Ответов 16
Метки нет (Все метки)
Коллеги добрый день!
Подскажите, совсем запамятовал.. Вот часто бывает необходимость проверить объект на null и если он равен null выдать исключение. Можно каждый раз писать конструкцию if ... throw new exception() ... Но удобнее было бы, скажем, повесить расширение на object. и в таком случае обращение было бы таким:
пихать в object не стоит... Ну и наверно производительность будет хромать? Что Вы думаете по этому поводу, стоит ли так делать, и если нет то почему? Буду очень признателен, спасибо!
0
|
||||||
| 15.05.2017, 15:33 | |
|
Ответы с готовыми решениями:
16
Методы расширения для анимаций
|
|
Master of Orion
|
||||||
| 15.05.2017, 15:45 | ||||||
Сообщение было отмечено Dimblch как решение
Решение
Dimblch, во-первых в шарпе на этот случай встроили синтаксис:
Экстешн писать можно (я так делал, на object вешал, да), но это было до того, как появился синтаксис из примера выше. Так что щас это уже не актуально. Ну и да, с чего должна проседать производительность от написания метода я не понял.
0
|
||||||
|
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,057
|
|
| 15.05.2017, 15:45 | |
|
Dimblch, производительность не пострадает, так как метод расширения это обычный статичный метод. Другое дело, что конкретно такое решение очень плохо: данный метод не имеет отношения к классу object, потому ему там не место. Его нужно вынести в отдельный статичный класс-хелпер.
0
|
|
|
Master of Orion
|
|
| 15.05.2017, 15:50 | |
|
Usaga, но ты ведь не сможешь заиспользовать этот хелпер, не подключив нужный неймспейс. А если подключил, то наверное ты хочешь именно этого функционала, и писать постоянно имя класса-хелпера не очень
С другой стороны, с новомодными using static получается даже более идеоматично ThrowIfNull(obj) против obj.ThrowIfNull(). Ну а с третьей стороны, ?? throw решает все проблемы.
0
|
|
|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
|
| 15.05.2017, 16:08 [ТС] | |
|
Спасибо парни!
А что если у меня имеет отношение к object? Т.я. я хочу иметь подобную проверку для любых объектов? Про тулзы понял, посмотрю. но допустим я их не использую, у меня свой хелпер класс(ы) и я их подключаю по мере необходимости. Т.е. как считаете такой подход нормальный? (получается что если в каком либо из классов я этот хелпер не подключил, не указав соответствующий alias, то object не будет захламляться) Psilon, по поводу синтаксиса ?? - все равно ведь получается громоздко и все равно пишешь проверку...
0
|
|
|
Master of Orion
|
||||||||||||||||
| 15.05.2017, 16:18 | ||||||||||||||||
|
Dimblch,
Добавлено через 5 минут Для аналога придется писать GetValueOrThrowIfNull - буковок не сильно меньше, метод нарушает SRP (и валидирует, и возаращет объект), это лишняя зависимость, и у тебя опять же нет контроля над тем, какой эксешпн кидать и с какими параметрами.
1
|
||||||||||||||||
|
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,057
|
|
| 15.05.2017, 16:19 | |
|
0
|
|
|
Master of Orion
|
||||||
| 15.05.2017, 16:22 | ||||||
|
Типичный пример:
Usaga, я про расширение и говорю. Хелперы без расширений лично я использую очень редко. Если тебе нужен хелпер, то ты подключаешь юзинг и юзаешь, если нет, то ты не захламляешь пространство методов, т.к. он будет показываться в списке доступных, только если ты заюзал юзинг, а значит наверное тебе оно нужно
0
|
||||||
|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
||
| 15.05.2017, 16:27 [ТС] | ||
|
только проверку. Если там сделать с присваиванием, то такое произойдет. Блин, вот SRP реально нарушает..А так хотелось ведь
0
|
||
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
||||||||
| 15.05.2017, 17:07 | ||||||||
|
У меня вот такая штука есть(спёр с хабра) Кликните здесь для просмотра всего текста
правда я её тоже не пользуюсь после последний C# правок.
1
|
||||||||
|
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
|
|
| 16.05.2017, 08:44 [ТС] | |
|
LeniumSoft, А что за последние правки?
0
|
|
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|||||||||||||||||
| 16.05.2017, 10:31 | |||||||||||||||||
Например проверка на null Было:
0
|
|||||||||||||||||
|
28 / 18 / 5
Регистрация: 05.05.2017
Сообщений: 73
|
|
| 16.05.2017, 12:19 | |
|
Я считаю никакого криминала в расширении с проверкой на null нет. Насчет неймспейсов - можно в глобальном неймспейсе объявить и оно везде будет. Единственное что такое лучше не делать если это какая-то публичная библиотека.
0
|
|
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|||||||
| 16.05.2017, 12:24 | |||||||
0
|
|||||||
|
Master of Orion
|
|
| 16.05.2017, 13:48 | |
|
jr_, эта коробка еще и содержит тонну багов, потому что основана на рерайтере бинарников. Когда встроят на уровень языка, тогда поговорим
![]() Добавлено через 51 секунду А еще есть вот такая штука
0
|
|
| 16.05.2017, 13:48 | |
|
Помогаю со студенческими работами здесь
17
Методы для проверки условий Intellisence в Visual Studio 2017 5.8.4 не отображает методы расширения для целочисленных литералов Как использовать свободное пространство Д для расширения С
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|