在.net中调试时是否可以发现对象的唯一标识符?

时间:2016-01-24 04:21:18

标签: .net visual-studio-2013

我现在正在追逐一个错误,而我正处于一个循环中,程序多次执行相同的功能。我需要知道的是,其中一个函数参数是否与之前进入函数的一个完全相同的对象,afaik没有简单的方法可以判断,因为对象的内容完全相同但是它可能是一个副本。

在c ++中,我可以查看对象的指针地址,看看它是否有所不同,但在.net中没有这样的运气。

有什么我可以打开的,我可以取消隐藏的某些表列或者我可以在调试运行期间执行的函数,它会给我一个与该对象实例绑定的唯一标识符,如内存地址吗?

2 个答案:

答案 0 :(得分:0)

您可以查看对象的GetHashCode功能结果。如果这对您来说不够精确,您可以通过继承IEqualityComparer并实现将对象的状态组合成唯一标识符的足够独特的方法来自行实现它。 ReSharper通过alt + insert快捷方式提供了代码生成工具。

如果您没有ReSharper可用,以下是它的典型实现:

public override int GetHashCode()
    {
        unchecked
        {
            int result = (PropertyOne != null ? PropertyOne.GetHashCode() : 0);
            result = (result * 397) ^ (PropertyTwo != null ? PropertyTwo.GetHashCode() : 0));
            result = (result * 397) ^ (PropertyThree != null ? PropertyThree.GetHashCode() : 0));
            //... etc
            return result;
        }
    }

答案 1 :(得分:0)

粗略但简单的方法是在您感兴趣的类中添加一个静态整数next id,并使用它来初始化一个对象id。

e.g:

    class MyClass
    {
      static int MyNextId = 0;
      private int _intanceId;

      public MyClass()
      {
        _instanceId = ++MyNextId;
      }
}