2012-04-05 3 views
2

Я пытаюсь выяснить, как иметь короткую, условную инструкцию с одной строкой.Условное утверждение Проверка Null

Если эта дата не является нулевой, добавить фильтр к текущему списку фильтров:

fromDt ?? filters.Add(FilterType.DateFrom, fromDt);

Есть ли способ сделать это? Я знаю, что мог бы сделать.

(fromDt != null) ? "something" : "something_else", но мне не нужен «еще», и мне бы очень хотелось просто использовать оператор ?? для нулевой проверки.

+1

Я бы посоветовал вам не делать этого - вы торгуете ясностью для сырого количества символов – BrokenGlass

+0

Вы делаете свой код страшным. К счастью для ваших сотрудников, нет однострочного способа сделать это, не используя инструкцию 'if'. –

+0

Это всего лишь мой собственный проект, и это то, что я хочу понять. Я бы не использовал его в большинстве [или любых] деловых случаях. – Cody

ответ

7

Что случилось с этим?

if (fromDt != null) filters.Add(FilterType.DateFrom, fromDt); 

Прежде всего, ваш код должен быть доступен для чтения. Даже если ваш код ?? работает, я не знаю, что он делает с первого взгляда.

+3

На самом деле, в первую очередь ваш код должен работать. Но только мельчайший smidgen за этим условием заключается в том, что он должен быть читабельным и легким для других. – Tenner

2

Код, который вы пытаетесь сделать, очень затрудняет чтение кода. Например, BrokenGlass сказал, что вы торгуете ясностью для сырого количества символов.

Это единственное решение для поддержки «одной линии» C#.

if (fromDt != null) filters.Add(FilterType.DateFrom, fromDt); 

Но я призываю всех, чтобы расширить это по крайней мере две линии (мое предпочтение четыре с фигурными скобками).

0

Назначение решения в сторону, следующий однострочный может дать вам end результат, который вы хотите использовать при использовании ??. Не пытайтесь это делать дома.

filters.Add(FilterType.DateFrom, fromDt ?? DateTime.MinValue)

Идея заключается в том, чтобы установить DateFrom до минимальной возможной стоимости, по существу, при добавлении открытого фильтра.

+0

Может ли проголосователю продумать? Это решение __is__, есть ли проблема с этим? – Cody

+1

Возможно, потому, что это подразумевает значение дозорного, которое затем необходимо проверить. Что, если вещь, вызывающая 'filters.Add', представляет собой цикл над последовательностью из 1000000 элементов с только одним ненулевым от даты. Вы получите список из 999999 фильтров с дозорным элементом, которые необходимо игнорировать, и один фильтр, который является реальным. Лучше просто закончить одним реальным фильтром. – Shibumi

+1

@Shibumi, цитируя доктора Орео «Это только мой собственный проект, и это просто то, что я хочу понять. Я бы не использовал его в большинстве [или каких-либо] деловых случаев». Каждое решение в разработке программного обеспечения может быть аннулировано с помощью «что, если вещь ...». Требовалось использовать некоторые синтаксические конструкции без учета производительности, следа, удобочитаемости и здравого смысла. Кроме того, цитируя себя «Не пытайтесь это дома», намекает на то, что этот ответ не должен применяться к циклу с 1000000 итерациями. –

Смежные вопросы