我在网上发现了this文章,并认为我会尝试将空字符串样式方法应用于我的excel范围值。有时候它有一个值,有时却没有,显然double
不喜欢空值。
这是我的小片段。
double valTotal = (rngTotal.Value != null ? 1 : 0);
我的问题是我用上面的代码做了什么?它看起来像一行中的if语句,其中“1”是“then”而“0”是“else”。是对的吗?最重要的是,这个语法的名称是什么,所以我可以找到更多相关信息?
答案 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'。
有关详细信息,请参阅以下链接。
答案 4 :(得分:0)