简单的问题:我有一个物体,我想识别它。后来我有一个物体,它应该是同一个物体,但我有一个印象,它不是。我怎么能确定呢?
我有一个基于TCP连接的对象模型,它属于Connections,而Connections属于Managers。看起来两个TCP连接是不同的,我可以看到这一点,但是当我试图查看它们所属的连接时,我得到错误消息CS0211: Cannot take the address of the given expression
。有人知道为什么以及如何处理这个问题吗?
观察两个TCP连接的窗口内容:
&connectionManager.Connection.TcpConnection 0x00007fe80035f670
&Connection_For_Message.TcpConnection 0x00007fe70042bf08
=〉两个TCPConnection都在另一个内存地址中,因此它们明显不同(尽管它们所有的值、属性和属性都是相等的)。
当要求对连接进行相同操作时,此操作不起作用:
&connectionManager.Connection error CS0211: Cannot take the address of the given expression
&Connection_For_Message 0x00007fe700375230
为什么会这样?
供您参考:当我请求connectionManager.Connection
(不是地址,只是数据)时,一切都很好。
先谢了
1条答案
按热度按时间djmepvbi1#
在代码的不同部分检索对象地址可能会产生误导,因为如果GC在中间运行,对象可能会被移动。最简单的方法是通过调用
GetHashCode()
方法检查对象的哈希代码。如果得到不同的数字,则两个对象肯定是不同的。但是相等的哈希代码并不意味着100%两个引用指向同一个对象。在这种情况下,您可以使用一个临时hack并将第一个对象存储在public static
变量中,然后,当代码到达第二个对象时,按照@KlausGütter在注解中的建议使用Object.ReferenceEquals(obj1, obj2)
。