【发布时间】:2012-02-09 03:24:27
【问题描述】:
我有 B 类和 A 类,这是 A 类和 B 类的简化版本。
class A
{
int x;
int y;
public A(int x, int y)
{
this.x = x;
this.y = y;
}
public A()
{
x = 0;
y = 0;
}
...
}
class B
{
A a;
public B(A a)
{
this.a = a;
}
public B()
{
this.a = null;
}
public A getA()
{
return a;
}
...
}
我需要比较对象 a 如下。
public class MyClass
{
public static void RunSnippet()
{
var a = new A(10, 20);
var b = new B(a);
Console.WriteLine(a == b.getA());
}
}
a == b.getA() 一直是正确的,但在同步到新的 A 和 B 之后,现在是 a != b.getA()。我使用调试器逐个元素地比较了 a 和 b.getA() 的元素,但它们似乎是相同的。
有没有办法比较a和b.getA()的引用(地址)? 使用 C/C++,我可以轻松获取指针值,但我不知道如何使用 C# 来做到这一点。
【问题讨论】:
-
是我没抓住重点,还是您在寻找Object.ReferenceEquals?
-
由于 A 和 B 是引用类型,而不是值类型,因此比较“它们的指针”正是您已经在做的事情;这就是为什么它返回平等。
-
除非你正在使用奇怪的类,否则 == 会为类做你想要的(不是值类型/字符串)。如果有人覆盖 == 运算符,请小心。 Object.ReferenceEquals 是最安全的(但不那么漂亮)。
标签: c# debugging pointers reference