C#条件运算符如何?评估成对使用时

时间:2014-05-12 17:27:23

标签: c# operators conditional

我正在试图弄清楚这个代码在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() 
       : "";

当它以这种方式编写它是否只是配对?和第一个:它来了?这没有任何意义,因为Result只能有一个值。希望这是有道理的,我试图将代码压缩到我遇到的问题,这样很容易理解。如果我不够清楚,请告诉我。

2 个答案:

答案 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 :(得分: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 = "";
}