所以,我有一些object
实例,我想将它们按一致的顺序排列。顺序是什么并不重要,只要我可以在任何一对实例上重复它,并获得相同的顺序即可。 (假设实例是唯一的。)
有没有办法在不依赖实例值的情况下做到这一点? (我知道 RuntimeHelpers.GetHashCode
可以为每个实例获得一致的哈希值,而不必担心其值,但不能保证哈希值是唯一的。)
基本上,我要求实现 IComparer<object>
.
最佳答案
Is there any way to do this without relying upon the instances' values?
没有。
Really?
好吧,您可以创建一个弱引用表,将对象映射到 guid,然后您的排序可以在弱引用表中查找对象,获取 guid,然后根据 guid 进行排序。
虽然价格昂贵,但可行。
它必须是一个弱引用表,因为否则你基本上会破坏垃圾收集器释放任何曾经按你的方案排序的对象的能力。
I know that RuntimeHelpers.GetHashCode can get a consistent hash for each instance without worrying about its value, but the hash isn't guaranteed to be unique.
这是正确的。如果您使用GetHashCode
对于平衡哈希表以外的其他事情,您几乎肯定做错了什么。它不是唯一标识符,并且不稳定。
I'm asking for an implementation of
IComparer<object>
.
你将不得不生活在失望之中。对引用对象进行总排序(无论其值如何)不是 .NET 提供的服务。
关于c# - 有没有办法在 C# 中通过引用对对象进行一致的排序/排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603043/