有没有一种方法可以通过C#中的引用一致地对对象进行排序/排序?

时间:2018-12-03 22:40:00

标签: c# sorting reference

因此,我有几个Listen 9080 <VirtualHost *:9080> DocumentRoot "/path/to/generic/site" <Directory /path/to/generic/site> AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost *:9080> DocumentRoot "/path/to/special/site" ServerName special.server.name <Directory /path/to/special/site> AllowOverride All Require all granted </Directory> </VirtualHost> 实例,我想将它们放在一致的顺序中。顺序无关紧要,只要我可以在任意一对实例上重复它,并获得相同的顺序即可。 (假设唯一的实例。)

是否有任何方法可以不依赖实例的值来执行此操作? (我知道object可以为每个实例获取一致的哈希,而不必担心其值,但是不能保证哈希是唯一的。)

基本上,我要求实现RuntimeHelpers.GetHashCode

1 个答案:

答案 0 :(得分:4)

  

是否有任何方法可以不依赖于实例的值?

否。

  

真的吗?

好吧,您可以创建一个弱引用表,将对象映射到guid,然后您的排序可以在弱引用表中查找对象,获取guid,然后在guid上进行排序。

那很贵,但是可行。

它必须是一个弱引用表,因为否则您将基本上破坏垃圾收集器释放由方案进行排序的任何对象的能力。

  

我知道RuntimeHelpers.GetHashCode可以为每个实例获取一致的哈希,而不必担心其值,但是不能保证哈希是唯一的。

是的。如果您将GetHashCode用于平衡哈希表以外的其他操作,则几乎肯定是在做错误的事情。它不是唯一的标识符,并且不稳定。

  

我要实现IComparer<object>

您将不得不失望地生活。 .NET不提供对参考对象的全部排序,无论它们的值如何。