C#为什么“If(Tuple == Class1.Tuple)”不起作用,但“If(Tuple.Item1 == Class1.Tuple.Item1&& Tuple.Item2 == Class1.Tuple.Item2)”是吗?

时间:2016-03-28 18:41:16

标签: c# if-statement tuples

在过去的几个月里,我一直在教自己C#,主要是通过试用/错误和大量的google / stackoverflow搜索,我对这里发生/未发生的事情感到困惑。我之前唯一的编码经验来自大约3年多前的Udacity的CS101课程,其中涉及一些基本的Python,其中大部分是我在开始使用C#时忘记的。

class Class1
{
    public Tuple<int, int> StoredLoc = Tuple.Create(12, 6);
}

public partial class MainWindow : Window
{
    Class1 Cls1 = new Class1();

    private bool CheckLocation(int x, int y) //x = 12, y = 6
    {
        Tuple<int, int> loc = Tuple.Create(x, y);
        //This Does Not work
        if (loc == Cls1.StoredLoc)
        {
            //Do Code
        }

        //This Does Work
        if (loc.Item1 == Cls1.StoredLoc.Item1 && loc.Item2 == Cls1.StoredLoc.Item2)
        {
            //Do code
        }
    }
} 

我在这里缺少什么?为什么loc == Cls1.StoredLoc不起作用?

1 个答案:

答案 0 :(得分:4)

Tuple不会重载==所以它正在比较引用(因为locCls1.StoredLoc不是同一个对象,并且不共享相同的引用,它返回false

但是您可以使用:loc.Equals(Cls1.StoredLoc),如果两个成员相等则返回true(如果int,则其值相同)

Check it in this fiddle

您可以获得有关在the MSDN中使用Equals时如何比较成员的更多信息,具体来说:

  

在以下条件下,obj参数被视为等于当前实例:

     
      
  • 这是一个元组对象。

  •   
  • 它的两个组件与当前实例的类型相同。

  •   
  • 它的两个组件与当前实例的组件相同。等式由每个组件的默认对象相等比较器确定。

  •