在过去的几个月里,我一直在教自己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
不起作用?
答案 0 :(得分:4)
Tuple
不会重载==
所以它正在比较引用(因为loc
和Cls1.StoredLoc
不是同一个对象,并且不共享相同的引用,它返回false
)
但是您可以使用:loc.Equals(Cls1.StoredLoc)
,如果两个成员相等则返回true(如果int
,则其值相同)
您可以获得有关在the MSDN中使用Equals
时如何比较成员的更多信息,具体来说:
在以下条件下,obj参数被视为等于当前实例:
这是一个元组对象。
它的两个组件与当前实例的类型相同。
它的两个组件与当前实例的组件相同。等式由每个组件的默认对象相等比较器确定。