На данный вопрос уже ответили:
public class Pair<FT, ST>
{
public FT x;
public ST y;
public Pair()
{ }
public Pair(FT a, ST b)
{
x = a;
y = b;
}
}
Dictionary<Pair<int, int>,int> used = new Dictionary<Pair<int, int>, int>();
Есть код выше. Я добавляю в used данные таким образом
used[new Pair<int, int>(x, y)] = 1;
И когда хочу проверить used.ContainsKey(new Pair<int, int>(x, y)), то всегда выдается false, даже тогда, когда такие же x,y уже есть. Просто добавляются еще раз. С чем это может быть связано?
Dictionary для того, чтобы обращаться к элементу по ключу, необходимо сравнивать ключи друг с другом.
Вы должны реализовать операцию сравнения двух объектов класса Pair<FT, ST>, например, реализовав интерфейс IEquatable<Pair<FT, ST>>, либо, переопределив метод object.Equals и object.GetHashCode.
Пример реализации IEquatable<Pair<FT, ST>>:
public class Pair<FT, ST> : IEquatable<Pair<FT, ST>>
{
private FT x;
private ST y;
public Pair()
{ }
public Pair(FT a, ST b)
{
x = a;
y = b;
}
public bool Equals(Pair<FT, ST> other)
{
return EqualityComparer<FT>.Default.Equals(x, other.x)
&& EqualityComparer<ST>.Default.Equals(y, other.y);
}
public override bool Equals(object other)
{
if (other is Pair<FT, ST>)
return Equals((Pair<FT, ST>)other);
return false;
}
public override int GetHashCode()
{
return EqualityComparer<FT>.Default.GetHashCode(x)
^ EqualityComparer<ST>.Default.GetHashCode(y);
}
}
Тонкий момент заключается в том, что эта операция сравнения не будет работать, если у типов FT и ST также нет реализации IEquatable<T> или не переопределён метод object.Equals.
UPDATE
Как здесь ниже справедливо дописали в комментариях, при реализации IEquality<T> Microsoft рекомендует также переопределить методы Equals и GetHashCode, а также операторы == и !=.
Так что самый дешёвый способ, это переопределить методы Equals и GetHashCode. Добавил изменения в код.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости