#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, это также позволяет избежать боксирования при выполнении пользовательской проверки равенства между структурами.