如何打印对象ID?

jav*_*red 10 c#

`我需要知道来自程序完全不同部分的两个引用是否引用同一个对象.我无法比较programaticaly参考,因为它们来自不同的上下文(一个参考从另一个参考不可见,反之亦然).

然后我想使用打印每个对象的唯一标识符Console.WriteLine().但是ToString()方法不返回"唯一"标识符,它只返回"classname".

是否可以在C#中打印唯一标识符(如在Java中)?

Jon*_*eet 19

您可以轻松获得的最接近的(不会受到GC移动对象等影响)可能是RuntimeHelpers.GetHashCode(Object).这给出了哈希码通过调用返回Object.GetHashCode()的对象非虚拟.但这仍然不是唯一的标识符.它可能足以用于诊断目的,但您不应该依赖它进行生产比较.

编辑:如果这只是用于诊断,你可以添加一种"规范化ID生成器",这只是List<object>...当你要求一个对象的"ID"时,你要检查它是否已经存在于列表中(通过比较引用)然后将它添加到最后,如果它没有.ID将是列表中的索引.当然,在不引入内存泄漏的情况下执行此操作会涉及弱引用等,但作为一个简单的hack,这可能对您有用.