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