На данный вопрос уже ответили:
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
. Добавил изменения в код.
Создаю автоматический файловую структуруИ на папке Private, нужно отключить наследование
Решил поюзать xaml c# , толком не разобрался ещё , но как я понял в среде разработки приложений для win10Вопрос в следующем : есть ли возможность...
Доброго времени суток, пытаюсь передать диспетчеру задач нажатие клавиши "Alt"