【发布时间】:2011-02-25 04:02:51
【问题描述】:
null 合并大致转换为 return x, unless it is null, in which case return y
我经常需要return null if x is null, otherwise return x.y
我可以使用return x == null ? null : x.y;
还不错,但是中间的null 总是困扰着我——这似乎是多余的。我更喜欢return x :: x.y; 之类的东西,其中:: 后面的内容只有在它前面的不是null 时才会被评估。
我认为这是几乎与空合并相反,有点混合了简洁的内联空检查,但我[几乎]确定C# 中没有这样的运算符。
还有其他语言有这样的运算符吗?如果有,它叫什么?
(我知道我可以用 C# 为它编写一个方法;我使用 return NullOrValue.of(x, () => x.y);,但如果你有更好的东西,我也想看看。)
【问题讨论】:
-
有些人在 C# 中要求 x?.y 之类的东西,但不存在这样的东西。
-
@Anthony 哦,那会很漂亮。谢谢。
-
在 c++ 中,这很容易表达为
return x ? x.y : NULL。是的,将指针类型转换为布尔值! -
@Novelocrat 在 C# 中最让我恼火的事情之一是他们没有遵循 C 如果 if(anything) = true 除非它是 if(0, false, null)
-
@Chris:这不是关于 C 的准确陈述。如果您有一个非标量变量(例如结构),则不能在条件中使用它。
标签: c# programming-languages syntax operators null-coalescing-operator