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

C# a==b==c与Python中的三重比较,c#,python,C#,Python,如何将这段python代码翻译成c# (哪个输出这个) 变成 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.Writ

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

(哪个输出这个)

变成

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());
            }
        }
    }
}
试试这个:

Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b && b == c).ToString());
Python有这样的定义:a==b==c的意思是:

(a==b)和(b==c)
在C#
中,a==b==C
的计算公式为:

(a==b)==c
要将Python的
a==b==c
转换为c,请使用


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

List<int> l = new List<int> { 1, 0 };
List l=新列表{1,0};
现在,您得到一个错误,即不能对类型为
bool
int
的操作数使用
=
运算符。但是您正在执行
int==int==int
。因此,对该错误的唯一解释是,在评估第二次比较之前,已经评估了其中一次比较。这就是这里发生的事情

表达式
a==b==c
相当于c#中的
(a==b)==c


Python在这里的特殊之处在于它将
a==b==c
扩展为
a==b和b==c
。因此,在C#中表达这一点的正确方法是
a==b&&b==C

好了,python
a==b==C
转换为
a==b和b==C
,为什么不直接使用它呢?另一篇文章有一个类似的答案:问题是直接要求翻译。
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
Console.WriteLine(a.ToString()+" "+b.ToString()+" "+c.ToString()+" "+(a==b && b == c).ToString());
a == b && b == c
List<int> l = new List<int> { 1, 0 };