2012-01-31 3 views
14

Я попытался с периодичностью случайных строк, все значения, которые я получил, являются положительными, но мне интересно:Будет ли string.GetHashCode() возвращать отрицательное значение?

Will String.GetHashCode() return negative or 0?

Поскольку возвращаемое значение равно int, так что, возможно, так оно и есть, поэтому, если это так, мне нужно изменить свою логику.

Если у вас есть ответ или есть какие-то официальные источники, пожалуйста, поделитесь

+1

FYI, GetHashCode является частью .NET, а не часть C# –

+1

Глядя на логику через отражатель, я бы сказал так. – leppie

+2

http://blogs.msdn.com/b/ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx – SLaks

ответ

24

Да, он может возвращать отрицательные значения.

Вы, , не должны иметь любую логику, которая работает с значениями GetHashCode().
GetHashCode() не гарантированно уникален и может меняться между сборками.

GetHashCode() следует рассматривать как непрозрачный токен, который можно комбинировать с другими хэшами или модифицировать в хеш-таблицы.

+2

SLaks прав - особенно между 32-битной и 64-разрядной архитектурой. –

+0

Вау, это меняется между сборками, что отстой, я должен использовать что-то еще, спасибо в любом случае :) –

+1

Да; вы _must_ используете что-то еще. 'GetHashCode()' предназначен только для хэш-таблиц в памяти. Вероятно, вы должны использовать SHA512. – SLaks