Я прочитал документацию MSDN о том, как работает Dictionary.ContainsKey()
, но мне было интересно, как это фактически делает сравнение равенства? В принципе, у меня есть словарь, привязанный к ссылочному типу *, и я хочу, чтобы метод ContainsKey()
проверял определенное свойство этого ссылочного типа в качестве основы для определения наличия ключа или нет. Например, если у меня есть Dictionary(MyObject, int)
и MyObject
имеет общедоступное свойство (из int
), называемое "TypeID", могу ли я получить ContainsKey(MyObject myObject)
, чтобы проверить, имеет ли один из ключей TypeID
, который равна MyObject
? Могу ли я просто перегрузить оператор ==
?
- Тип ссылки - это объект с названием "Длительность", который содержит значение (
double Length
); "Длительность" - это базовый тип, используемый в моей музыкальной программе, для обозначения того, как долго длится определенный звук. Я извлекаю из него классы, которые включают более сложные временные концепции, такие как западные музыкальные сигнатуры времени, но хотят, чтобы все они были сопоставимыми по длине.
EDIT: Как было предложено, я реализовал IEquitable на моем объекте следующим образом:
public class Duration : IEquatable<Duration>
{
protected double _length;
/// <summary>
/// Gets or Sets the duration in Miliseconds.
/// </summary>
public virtual double Length
{
get
{
return _length;
}
set
{
_length = value;
}
}
// removed all the other code that as it was irrelevant
public override bool Equals(object obj)
{
Duration otherDuration = (Duration)obj;
if (otherDuration._length == _length)
{
return true;
}
else
{
return false
}
}
}
Это все, что мне нужно сделать?