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

Mac*_*n17 2 c# conditional operators

我想弄清楚这个代码在C#中做了什么我不是很熟悉?运营商和这种用法令我感到困惑.我知道,如果我做这样的事情.

Result = ans > 0 ? string.IsNullOrWhiteSpace(line[0]) : "";
Run Code Online (Sandbox Code Playgroud)

归结为:

if(ans > 0)
    Result = string.IsNullOrWhiteSpace(line[0]);
else 
    Result = "";
Run Code Online (Sandbox Code Playgroud)

但是我不明白当这条线是这样时会发生什么:

Result = ans > 0 
       ? string.IsNullOrWhiteSpace(line[0]) 
       ? ""
       : line[0].Trim().ToUpper() 
       : "";
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 6

解析表单的表达式没有歧义a ? b ? c : d : e:解析它的唯一方法是

a ? (b ? c : d) : e
Run Code Online (Sandbox Code Playgroud)

更有趣的解析是将条件表达式用作最后一个操作数而不是中间操作数.Microsoft文档提供了以下答案:

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

但是,至少对这样的表达式进行括号表示是一个好主意,因为您的代码的某些读者需要查阅语言参考以理解可能简单的逻辑.