[英]Why does my && concatenated comparison return different results?
有人可以解释为什么不带括号result1 == true
的比较返回的结果与带括号result2 == false
的比较不同吗? 这两个结果都应该是错误的,因为_enum != TestEnum.Member2
。
class Program
{
private static TestEnum _enum = TestEnum.Member1;
private static int? _int = null;
private static string _string = null;
public static void Main(params string[] args)
{
var result1 = _enum == TestEnum.Member2 &&
_int != null ? _int == 5 : true &&
_string != null ? _string == "abc" : true;
var result2 = (_enum == TestEnum.Member2) &&
(_int != null ? _int == 5 : true) &&
(_string != null ? _string == "abc" : true);
Console.WriteLine("result1: " + result1);
Console.WriteLine("result2: " + result2);
}
}
public enum TestEnum
{
Member1,
Member2
}
.net 小提琴: https ://dotnetfiddle.net/daA0Lh
原因是运算符优先级
这是您正在使用的运算符的优先顺序。
()
==
&&
? :
所以...
var result1 = _enum == TestEnum.Member2 &&
_int != null ? _int == 5 : true &&
_string != null ? _string == "abc" : true;
与 - 这里的括号不应该改变表达式的计算方式,但应该用来明确表达式的计算方式。
var result1 = ((_enum == TestEnum.Member2) && _int != null)
? (_int == 5)
: ((true && _string != null)
? _string == "abc"
: true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.