这个内联空检查和添加评估的顺序是什么
What is the sequence of this inline null check and addition evaluation
我想不出更好的标题,但我花了很长时间才找到这个错误。
有人可以向我解释为什么这会给我不同的输出吗?
string may = "May";
string june = "June";
string july = "July";
Console.WriteLine(may?.Length ?? 0 + june?.Length ?? 0 + july?.Length ?? 0) ;
Console.WriteLine(may == null ? 0 : may.Length + june == null ? 0 : june.Length + july == null ? 0 : july.Length) ;
Console.WriteLine( (may == null ? 0 : may.Length) + (june == null ? 0 : june.Length) + (july == null ? 0 : july.Length)) ;
我已经一步步经历了它,但在我的脑海里,我就是想不通到底发生了什么。
这里的求值顺序是什么?
我希望字符串 null 合并逻辑或三元逻辑像这样(顺便说一句,这很有效!):
int tempRes = 0;
tempRes+=may == null ? 0 : may.Length;
tempRes+=june == null ? 0 : june.Length;
tempRes+=july == null ? 0 : july.Length;
Console.WriteLine(tempRes);
与其说是求值顺序,不如说是运算符优先级。
may?.Length ?? 0 + june?.Length ?? 0 + july?.Length ?? 0
这意味着:
may?.Length ?? (0 + june?.Length) ?? (0 + july?.Length) ?? 0
这显然不是你想要的。你想要的可以表示为
(may?.Length ?? 0) + (june?.Length ?? 0) + (july?.Length ?? 0)
同样,
may == null ? 0 : may.Length + june == null ? 0 : june.Length + july == null ? 0 : july.Length
表示
may == null ? 0 : ((may.Length + june) == null ? 0 : ((june.Length + july) == null ? 0 : july.Length))
我想不出更好的标题,但我花了很长时间才找到这个错误。
有人可以向我解释为什么这会给我不同的输出吗?
string may = "May";
string june = "June";
string july = "July";
Console.WriteLine(may?.Length ?? 0 + june?.Length ?? 0 + july?.Length ?? 0) ;
Console.WriteLine(may == null ? 0 : may.Length + june == null ? 0 : june.Length + july == null ? 0 : july.Length) ;
Console.WriteLine( (may == null ? 0 : may.Length) + (june == null ? 0 : june.Length) + (july == null ? 0 : july.Length)) ;
我已经一步步经历了它,但在我的脑海里,我就是想不通到底发生了什么。 这里的求值顺序是什么?
我希望字符串 null 合并逻辑或三元逻辑像这样(顺便说一句,这很有效!):
int tempRes = 0;
tempRes+=may == null ? 0 : may.Length;
tempRes+=june == null ? 0 : june.Length;
tempRes+=july == null ? 0 : july.Length;
Console.WriteLine(tempRes);
与其说是求值顺序,不如说是运算符优先级。
may?.Length ?? 0 + june?.Length ?? 0 + july?.Length ?? 0
这意味着:
may?.Length ?? (0 + june?.Length) ?? (0 + july?.Length) ?? 0
这显然不是你想要的。你想要的可以表示为
(may?.Length ?? 0) + (june?.Length ?? 0) + (july?.Length ?? 0)
同样,
may == null ? 0 : may.Length + june == null ? 0 : june.Length + july == null ? 0 : july.Length
表示
may == null ? 0 : ((may.Length + june) == null ? 0 : ((june.Length + july) == null ? 0 : july.Length))