c# - 有没有办法在 C# 中通过引用对对象进行一致的排序/排序?

标签 c# sorting reference

所以,我有一些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/

相关文章:

c# - Roslyn Analyzer - 查找接口(interface)方法调用的当前具体实现

c# - WCF 证书链,以编程方式验证

c# - 小心加载签名程序集的版本号

Python 按数字对字典列表进行排序

java - 最近的 Java 引用资料?

javascript - 如何获取事件按钮 ref 属性并将其分配给 vue.js 中的变量

c# - T4 模板中无法识别 EnvDTE 类型

python-3.x - 贪心算法和时间复杂度#2

datatable - Asp Core 1.1、DataTable两者都存在

mysql - ORDER BY 中使用的计算值是否在排序期间重新计算过?