Como mi cobertura de prueba (unidad) todavía es bastante baja, desafortunadamente, tengo que encontrar muchos errores por las malas. Por lo tanto, durante la refactorización, confío mucho en la verificación de tipos del compilador de C#.Type-safe Igual()
Hoy solucioné un error introducido durante la refactorización al omitir una línea con x.Equals(aThingWrappingOriginalThing)
. Como es bool Equals(object T)
, el compilador no se quejó. Sin embargo, el 90% del tiempo que uso Equals()
directamente (en lugar de BCL), intento comparar lógicamente objetos del mismo tipo.
Ahora me pregunto por qué nunca he visto a alguien promocionando una versión segura de tipo de Equals()
para tales situaciones (en C#). ¿Hay una mejor práctica para esto?
Estoy tentado a usar un método de extensión para aquellas comparaciones, así:
public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}
Podrían estos pueden optimizar?
Aquí es la única entrada en el blog sobre el tema que he encontrado, para Java: http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html
Aquí hay algunos antecedentes sobre el tema: http://blogs.msdn.com/b/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx – Vlad