繁体   English   中英

为什么我的 && 连接比较返回不同的结果?

[英]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

原因是运算符优先级

这是您正在使用的运算符的优先顺序。

  1. ()
  2. ==
  3. &&
  4. ? :

所以...

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM