Тип -сейф Равно()

Так как покрытие (модульным -)тестом все еще довольно низкое, к сожалению, мне приходится находить много ошибок трудным путем. Поэтому при рефакторинге я сильно полагаюсь на проверку типов компилятора C #.

Сегодня я исправил ошибку, появившуюся во время рефакторинга, когда пропустил строку с x.Equals(aThingWrappingOriginalThing). Поскольку это bool Equals(object T), компилятор не жаловался. Однако в 90% случаев я использую Equals()напрямую (, а не через BCL ), я намерен логически сравнивать объекты одного типа.

Теперь мне интересно, почему я никогда не видел, чтобы кто-то продвигал тип -безопасную версию Equals()для таких ситуаций (в C #). Есть ли лучшая практика для этого?

У меня возникает соблазн использовать метод расширения для этих сравнений, например:

public static bool SafeEquals(this T a, T b)
{
    if (a == null) return b == null;
    return a.Equals(b);
}
public static bool SafeEquals(this IEquatable a, IEquatable b)
{
    if (a == null) return b == null;
    return a.Equals(b);
}

Можно ли их оптимизировать?

Вот единственная запись в блоге по теме, которую я нашел для java: http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html

8
задан Equalizer 10 July 2012 в 20:13
поделиться