Это причина, по которой был введен IEquatable?

#c#

#c#

Вопрос:

Это основная причина, по которой был введен IEquatable<T> интерфейс, потому что он позволяет вам делать то же самое, что и System.Object.Equals метод, но без необходимости выполнять приведения?

Спасибо

Ответ №1:

Я бы подумал, чтобы сделать его типобезопасным. Equals() принимает объект в качестве параметра, и, следовательно, вы не увидите ошибку, если передадите объект неправильного типа, пока не запустите его.

Ответ №2:

Одна из причин заключается в том, что вы можете потребовать, чтобы класс был приравнен к желаемому типу, не обязательно являясь этим типом. Например.

 public void MyClass<T> where T : IEquatable<Foo>
{
    private static readonly Foo SpecialFoo = Foo.SpecialFoo;

    public void MyMethodThatProcessesTs(T theT)
    {
        if (theT.Equals(SpecialFoo))
        {
            // process theT.
        }
    }
}
  

Ответ №3:

В дополнение к тому, что говорит @Balar, это также позволяет избежать боксирования при выполнении пользовательской проверки равенства между структурами.