Вы не можете буквально упорядочить объекты .NET по ссылке ... очевидно, вы даже не можете использовать "небезопасный" код для преобразования ссылки в целое число:
unsafe int ReferenceToInt(object o)
{
// Error: cannot declare a pointer to a managed type.
fixed (object* ptr = o)
return (int)ptr;
}
В любом случае, это не будет хорошей идеей, так как компактная сборка мусора может изменить не только адрес каждого объекта, но и относительный порядок между объектами. Даже если GC не изменил относительный порядок, GC может работать в любое время, что сделает заказ по ссылке очень опасным.
Реализация по умолчанию GetHashCode()
возвращает какой-то идентификатор объекта, который вы можете использовать вместо этого. И, как упоминал Фредерик, вы можете использовать Object.ReferenceEquals (), чтобы подтвердить, что две ссылки совпадают.
Наконец, в большинстве случаев вы должны просто использовать Dictionary, HashSet или LINQ, как уже упоминали другие.