Так как покрытие (модульным -)тестом все еще довольно низкое, к сожалению, мне приходится находить много ошибок трудным путем. Поэтому при рефакторинге я сильно полагаюсь на проверку типов компилятора 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