繁体   English   中英

C# 与 Python 中的 a == b == c 三重比较

[英]a == b == c triple comparison in C# vs Python

你如何将这个python代码翻译成c#

l = [True, False]
for a in l:
    for b in l:
            for c in l:
                    print(a, b, c, a==b==c)

(输出这个)

True True True True
True True False False
True False True False
True False False False
False True True False
False True False False
False False True False
False False False True

进入类似的东西

void Main()
{
    List<bool> l = new List<bool> (){true, false};
    foreach(var a in l)
    {
        foreach(var b in l)
        {
            foreach(var c in l)
            {
                Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b==c).ToString());
            }
        }
    }
}

不幸的是,它以不同的方式工作并输出:

True True True True
True True False False
True False True False
True False False True
False True True False
False True False True
False False True True
False False False False

Python 具有链式比较,因此a == b == c表示:

(a == b) and (b == c)

在 C# 中a == b == c被评估为:

(a == b) == c

要将 Python 的a == b == c为 C# 使用

a == b && b == c

当您将列表更改为以下内容时,问题变得明显:

List<int> l = new List<int> { 1, 0 };

现在,您会收到一个错误,提示您不能在boolint类型的操作数上使用==运算符。 但是你在做int == int == int 因此,错误的唯一解释是在评估第二个比较之前已经评估了其中一个比较。 这正是这里发生的事情。

表达式a == b == c等价于 C# 中的(a == b) == c

Python 的特殊之处在于它将a == b == c扩展为a == b and b == c 所以在 C# 中表达它的正确方法是a == b && b == c

尝试这个:

Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b && b == c).ToString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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