Vous ne pouvez pas commander littéralement des objets .NET par référence ... apparemment vous ne pouvez pas utiliser même code « dangereux » pour convertir une référence à un entier:
unsafe int ReferenceToInt(object o)
{
// Error: cannot declare a pointer to a managed type.
fixed (object* ptr = o)
return (int)ptr;
}
Ce ne serait pas un bonne idée de toute façon, car une collection de garbage compactage pourrait changer non seulement l'adresse de chaque objet, mais l'ordre relatif entre les objets. Même si le GC n'a pas changé d'ordre relatif, le GC peut fonctionner à tout moment, ce qui rendrait la commande par référence très dangereuse.
L'implémentation par défaut de GetHashCode()
renvoie une sorte d'ID d'objet que vous pouvez utiliser à la place. Et, comme Frédéric l'a mentionné, vous pouvez utiliser Object.ReferenceEquals() pour confirmer que deux références sont identiques. Enfin, dans la plupart des cas, vous devriez simplement utiliser Dictionary, HashSet ou LINQ, comme d'autres l'ont mentionné.
"commande par" référence? Deux références peuvent seulement être "égales" ou "inégales", pas "supérieures/inférieures". –
Je m'attendrais à ce que le runtime puisse me fournir un ordre arbitraire (mais fixe) sur les références. Si je pouvais trier les deux collections par ce comparateur, alors je pourrais vérifier plus efficacement si les collections contiennent exactement les mêmes instances d'objet. – pauldoo
Ce n'est pas efficace, il nécessite O (nlog (n)) heure et O (n) de stockage. La recherche de doublons nécessite seulement le temps O (n) et le stockage. –