2014-05-12 57 views
2

我试图找出这个代码在C#我不是那熟悉使用时评价?操作员,这种用法令我困惑。 我知道如果我做这样的事情。C#条件运算符如何?在对

Result = ans > 0 ? string.IsNullOrWhiteSpace(line[0]) : ""; 

它归结为:

if(ans > 0) 
    Result = string.IsNullOrWhiteSpace(line[0]); 
else 
    Result = ""; 

但是我不明白发生了什么时,该行是这样的,而不是:

Result = ans > 0 
     ? string.IsNullOrWhiteSpace(line[0]) 
     ? "" 
     : line[0].Trim().ToUpper() 
     : ""; 

当这样写呢它只是配对?与第一:说到?这并没有意义,因为结果只能有一个值。希望这是有道理的,我试图将代码压缩到只有我遇到的问题,这样才能很容易理解。如果我不够清楚,请告诉我。

+0

从左至右,从上到下。 –

+0

这不会编译,因为'value ++'不是布尔值。 – Lee

+0

看起来它甚至不会编译。也许你缩小了错误或用错误的语言标记了。发布前测试你的代码。 –

回答

6

有一个在解析形式a ? b ? c : d : e的表达没有歧义:解析它是

a ? (b ? c : d) : e 

当条件表达式作为最后一个操作数,而不是一个更有意思的解析会的唯一途径中间。 Microsoft documentation为此提供了答案:

条件运算符是右关联的。 表达a ? b : c ? d : e被评价为a ? b : (c ? d : e),而不是作为(a ? b : c) ? d : e

但是,至少用这样的表达式括起来是个好主意,因为你的代码的一些读者需要咨询一个语言参考,以便理解一个潜在的简单逻辑。

+1

那么,什么'价值++? “”:行[0]'评估为? –

+1

@HenkHolterman OP删除了他的问题中没有编译的部分。 – dasblinkenlight

+0

而'a? b? c:d:e'是'a? (B C:?d):e' – juharr

3

从您的文章,

Result = ans > 0 
    ? string.IsNullOrWhiteSpace(line[0]) 
    ? "" 
    : line[0].Trim().ToUpper() 
    : ""; 

相当于

if(ans > 0) 
{ 
    if(string.IsNullOrWhiteSpace(line[0])) 
    { 
     Result = ""; 
    } 
    else 
    { 
     Result = line[0].Trim().ToUpper(); 
    } 
} 
else 
{ 
    Result = ""; 
}