C# 条件语句检查Null

C# 条件语句检查Null,c#,c#-4.0,if-statement,unary-operator,C#,C# 4.0,If Statement,Unary Operator,我想知道如何得到一个简短的,一行的条件语句 如果此日期不为空,请将筛选器添加到当前筛选器列表中: fromDt??filters.Add(FilterType.DateFrom,fromDt) 有办法做到这一点吗?我知道我能做到 (fromDt!=null)?“something”:“something_else”,但我不需要“else”,我只想使用?运算符进行空值检查。这有什么问题 if (fromDt != null) filters.Add(FilterType.DateFrom, fro

我想知道如何得到一个简短的,一行的条件语句

如果此日期不为空,请将筛选器添加到当前筛选器列表中:

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

有办法做到这一点吗?我知道我能做到


(fromDt!=null)?“something”:“something_else”
,但我不需要“else”,我只想使用
运算符进行空值检查。

这有什么问题

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

首先,您的代码应该是可读的。即使你的
代码运行正常,我也不知道它第一眼看到的是什么。

你正在尝试的代码使你的代码很难阅读。如前所述,您正在用清晰性换取原始字符数

这是C#支持的唯一“一线”解决方案

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

但我鼓励大家至少扩展到两行(我的首选是四行加大括号)。

除了解决方案的目的之外,在使用
??
时,遵循一行可能会得到您想要的最终结果。但不要在家里尝试

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


我们的想法是将DateFrom设置为可能的最小值,本质上是添加一个开放过滤器。

我建议您不要这样做-您正在用清晰度换取原始字符数,这让您的代码变得糟糕。幸运的是,对于你的同事来说,如果不使用
if
语句,没有一种单行的方法可以做到这一点。这只是我的一个附带项目,也是我想弄明白如何使用的东西。我不会在大多数(或任何)业务案例中使用它。事实上,首先,您的代码应该工作。但是,在这种情况下,只有一点是它应该是可读的,并且便于他人维护。下面的投票人想详细说明一下吗?这是一个解决方案,有什么问题吗?可能是因为这意味着需要检查哨兵值。如果调用
filters.Add
的东西是一个循环,它覆盖了1000000个项目的序列,其中只有一个非null from date。你最终会得到一个列表,其中包含999999个需要忽略的sentinel过滤器和一个真实的过滤器。最好是以一个真正的过滤器结束。@Shibumi引用Oreo博士的话说,“这只是我的一个附带项目,我只是想弄明白如何使用它。我不会在大多数(或任何)商业案例中使用它。”软件开发中的每一个解决方案都可以用“如果事情发生了会怎样……”来宣告无效。要求是使用某些语法结构,而不考虑性能、占用空间、可读性和常识。另外,引用我自己的话“不要在家里尝试这个”暗示了这样一个事实:这个答案不适用于有1000000次迭代的循环。这绝对是一个有趣的解决方案,并且给了我一些可以使用的东西。@THX我认为……不考虑性能、占用空间、可读性和常识。是您添加的内容,而不是原始规范的一部分。