Итак, у меня есть класс, который переопределяет Equals (object obj) и GetHashCode () вместе с реализацией IEquatable. Чтобы сделать работу с этим типом немного более естественной при проверке на равенство, я подумал, черт возьми, я бы перегрузил оператор равенства и оператор неравенства, не беспокойтесь ...
О, беспокойство ... рассмотрим следующее - где оба экземпляра myType НЕ равны нулю:
if (myType != container.myType) //NullReferenceException
{
//never get here
}
//never get here either
Теперь контейнер - это просто еще один класс для хранения экземпляра myType, помимо прочего, который используется для кэширования элементов.
Вот фактический (соответствующий) код из myType:
public class MyType : IEquatable<MyType>
{
public static bool operator ==(MyType myTypeA, MyType myTypeB)
{
return myTypeA.Equals(myTypeB);
}
public static bool operator !=(MyType myTypeA, MyType myTypeB)
{
return !(myTypeA == myTypeB);
}
public override bool Equals(object obj)
{
if (obj != null && obj is MyType)
{
return Equals((MyType)obj);
}
return false;
}
public bool Equals(MyType other)
{
if (other != null)
{
return other.ToString() == ToString();
}
return false;
}
}
Есть ли опыт на этом фронте?
Спасибо.