假设您正在进行调试。某个时刻,您正在方法A中,它有一个名为foo的参数,类型为Foo
。稍后,您在方法B中,也有一个类型为Foo
的参数foo。
这两个变量可能是同一个Foo
实例,但是如何判断呢?由于它们处于不同的作用域,您无法调用ReferenceEquals()
。是否有一种方法可以获取变量指向的实际内存位置,以便您可以确定它们是否是同一个实例?
假设您正在进行调试。某个时刻,您正在方法A中,它有一个名为foo的参数,类型为Foo
。稍后,您在方法B中,也有一个类型为Foo
的参数foo。
这两个变量可能是同一个Foo
实例,但是如何判断呢?由于它们处于不同的作用域,您无法调用ReferenceEquals()
。是否有一种方法可以获取变量指向的实际内存位置,以便您可以确定它们是否是同一个实例?
在调试器中,您可以将第一个方法中的对象引用存储到静态字段中,然后将第二个方法中的变量与静态字段进行比较。
var whatever = foo;
然后,在第二个方法中,输入以下内容:
bool test = object.ReferenceEquals(whatever, foo);
立即窗口将显示测试结果。
然而,CodeNaked的建议更好。
你可以通过获取变量的指针来完成操作,但这需要在不安全模式下运行。
一旦你进入了 "不安全" 模式,就可以像这样声明一个指向 Foo 的指针:
Foo* p = &myFoo;
这个问题在SO上已经讨论过了: