Доброго времени суток. Имеется вот такой код:
namespace Stardust.Core.World
{
public class SpaceObject
{
public SpaceObject()
{
LastLeasedID++;
ID = LastLeasedID;
}
/// <summary>
/// Уникальный идентификатор этого объекта. Не может быть изменен после создания.
/// </summary>
public readonly Int32 ID;
public override Boolean Equals(Object obj)
{
var o = obj as SpaceObject;
if (o != null)
return this.ID == o.ID;
return false;
}
public Boolean Equals(SpaceObject other)
{
return other != null && this.ID == other.ID;
}
public override Int32 GetHashCode()
{
return ID;
}
public static Int32 LastLeasedID { get; private set; }
}
}
Т.е. это объект, который всегда имеет уникальный идентификатор, он же порядковый номер. Вопрос: корректна ли в данном случае такая реализация GetHashCode (equals вроде логичен)? В частности, не возникнет ли проблем со словарем, в котором будет пара десятков/сотен таких объектов? Есть подозрение, что такое неравномерное распределение будет плохо для реализации хеширования в словаре и возникнет много коллизий, но не уверен.