c#条件运算符是如何实现的?成对使用时求值

本文关键字:条件运算符 何实现 实现 | 更新日期: 2023-09-27 18:02:51

我想弄清楚这段代码在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只能有一个值。希望这是有意义的,我试图将代码浓缩到我所遇到的问题,以便易于理解。如果我说得不够清楚,请告诉我。

c#条件运算符是如何实现的?成对使用时求值

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

a ? (b ? c : d) : e

一个更有趣的解析是当一个条件表达式被用作最后一个操作数,而不是中间。Microsoft文档提供了这个问题的答案:

条件运算符是右结合的。表达式a ? b : c ? d : e被求值为a ? b : (c ? d : e),而不是(a ? b : c) ? d : e

但是,至少把这样的表达式括起来是个好主意,因为代码的一些读者可能需要查阅语言参考,以便理解一个可能简单的逻辑。

从你的帖子,

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 = "";
}