Я создал объект, скажем, детали. Затем я назначаю: int x = details.GetHashCode ();
Позже в программе я хотел бы получить доступ к этому объекту, используя целое число x. Есть ли способ сделать это в C #?
Большое спасибо
Пол
Нет:
Вы могли бы создать (скажем) Dictionary<int, Details> и использовать хэш-код в качествеключ - но я настоятельно рекомендую, чтобы вы не сделали это.
Dictionary<int, Details>
По какой причине вы не хотите просто хранить ссылку на объект вместо хеш-кода?
Хеш-код не предназначен для непосредственного использования.Его основное назначение - чтобы элемент можно было использовать в качестве ключа в коллекции.В этом случае коллекции несут ответственность за сопоставление хеша с объектом.в основном это позволяет вам делать что-то вроде Dictonary<details, myClass2>, что было бы намного сложнее, если бы GetHashCode не был реализован ... но функция не очень полезна, если вы не реализуете свою собственную коллекцию или оператор равенства.
Dictonary<details, myClass2>
public static Detail GetDetailsFromHash(this List<Detail> detailsList, int x) { foreach (var details in detailslist) { if (details.GetHashCode() == x) { return details; } } return null; }
Однако хеш-коды не гарантированно являются уникальными
Сохраните целое число и просто проверьте хэш-код еще раз.
Обратите внимание, что в C # хэш-код не гарантированно уникален. Если вы имеете дело с несколькими миллионами объектов, вы можете легко встретить дубликаты хеша с реализацией по умолчанию.
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
"Реализация по умолчанию метода GetHashCode не гарантирует уникальные возвращаемые значения для различных объектов."
Да, вы можете создать Dictionary<int,Details> и сохранить объект в этом словаре, используя хеш-код из details.GetHashCode( ), а затем вытащить объект из словаря, используя x.
Dictionary<int,Details>
details.GetHashCode( )
x
Но это не то, что я бы предложил сделать! Что ты пытаешься достичь?
Если есть способ, который идет против ориентации объекта.Вы должны предоставить подробные ссылки на код потребления.
Нет.
Хэш-код представляет значение некоторой хеширующей функции для объекта.
Вы не можете воссоздать исходную ссылку на объект из этого, и, что более важно, нет гарантии, что объектвсе еще существует.