我正在使用的这个功能是什么?它有效,但为什么?

时间:2011-08-30 16:24:12

标签: c#

我在网上发现了this文章,并认为我会尝试将空字符串样式方法应用于我的excel范围值。有时候它有一个值,有时却没有,显然double不喜欢空值。

这是我的小片段。

double valTotal = (rngTotal.Value != null ? 1 : 0);

我的问题是我用上面的代码做了什么?它看起来像一行中的if语句,其中“1”是“then”而“0”是“else”。是对的吗?最重要的是,这个语法的名称是什么,所以我可以找到更多相关信息?

5 个答案:

答案 0 :(得分:9)

这是conditional operator。 (有时被错误地称为三元运算符;它是一个三元运算符,因为它有三个操作数,但它的名称是条件运算符。如果另一个三元运算符被添加到C#中, “三元运算符”将成为一个模糊/非感性的短语。)

简要说明:

计算第一个操作数,如果结果为true,则计算第二个操作数并形成表达式的整体值。否则,将评估第三个操作数并形成表达式的整体值。

在类型转换等方面有更多细节,但这是基本要点。

重要的是,第一个操作数总是只评估一次,并且只计算第二个或第三个操作数的一个。例如,这总是安全的:

string text = GetValueOrNull();
int length = text == null ? 5 : text.Length;

如果NullReferenceException为真,那么text.Length永远不会被评估为text == null

它是一个单独的表达式也很重要 - 这意味着您可以在某些地方使用它(例如变量初始值设定项),在这些地方你不能使用if / else等价物。

密切相关的是null-coalescing operator,这也是值得了解的。

答案 1 :(得分:2)

答案 2 :(得分:1)

这在C#中称为条件/三元运算符。对于以下

来说,它本质上是空手而归
double valTotal;
if (rngTotal.Value !=null) {
  valTotal = 1;
} else {
  valTotal = 0;
}

答案 3 :(得分:1)

这是条件运算符。是的,它就像一个“内联如果”。对于short if表达式,它是一个方便的快捷方式。 '?'之前的部分如果布尔条件为真,则为布尔条件,然后是'?'后的部分否则评估“:”之后的部分。换句话说'?'和':'在if语句中表现为'then'和'else'。

有关详细信息,请参阅以下链接。

https://msdn.microsoft.com/en-us/library/ty67wk28.aspx

The ternary (conditional) operator in C

答案 4 :(得分:0)