我正在试图弄清楚这个代码在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只能有一个值。希望这是有道理的,我试图将代码压缩到我遇到的问题,这样很容易理解。如果我不够清楚,请告诉我。
答案 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 = "";
}