Как я могу создать хэш-код для пользовательской структуры данных?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу создать хэш-код для пользовательской структуры данных?

Сообщение Anonymous »

Я создал собственную структуру данных «Координата», которая определяет положение объекта в соответствии с определенной системой.

Координата определяется следующим образом:< /p>

Код: Выделить всё

public class Coordinate
{
public int X;
public int Y;
private int face;
public int Face
{
get { return face; }
set
{
if (value >= 6 | value < 0)
throw new Exception("Invalid face number");
else
face = value;
}
}
private int shell;
public int Shell
{
get { return shell; }
set
{
if (value < 0)
throw new Exception("No negative shell value allowed");
else
shell = value;
}
}

public Coordinate(int face, int x, int y, int shell)
{
this.X = x;
this.Y = y;
this.face = face;
this.shell = shell;
}

public static Coordinate operator +(Coordinate a, Coordinate b)
{
return new Coordinate(a.Face + b.Face, a.X + b.X, a.Y + b.Y, a.Shell + b.Shell);
}

public override bool Equals(object obj)
{
Coordinate other = (obj as Coordinate);
if (other == null)
return false;
else
return (Face == other.Face && Shell == other.Shell && X == other.X && Y == other.Y);
}
}
Или, подводя итог, он содержит int Face (от 0 до 5), int X, int Y и int Shell. X, Y и Shell привязаны ниже к 0 (включительно).

У меня вообще нет опыта работы с хеш-кодами. Мне нужно сравнить их, чтобы увидеть, равны ли они. Я попробовал это:

Код: Выделить всё

private const int MULTIPLIER = 89;

[...]

int hashCode = 1;
hashCode = MULTIPLIER * hashCode + obj.X.GetHashCode();
hashCode = MULTIPLIER * hashCode + obj.Y.GetHashCode();
hashCode = MULTIPLIER * hashCode + obj.Face.GetHashCode();
hashCode = MULTIPLIER * hashCode + obj.Shell.GetHashCode();
return hashCode;
Я нашел что-то в Google. Но когда я пытаюсь скомпилировать код с помощью этого метода, я почти уверен, что он сталкивается с коллизиями, поскольку сборка никогда не завершается. Наверное, запутался во всякой путанице, думая, что некоторые координаты одинаковы или что-то в этом роде.

Извините, этот вопрос довольно элементарный, но по какой-то причине я я в тупике. Мне просто нужен совет, как написать этот хеш-код, чтобы он не конфликтовал.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -structure
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»