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

本文关键字:比较 三重 Python 中的 | 更新日期: 2023-09-27 18:15:16

如何将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

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

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());