Tengo una clase PagedModel que implementa IEnumerable para que simplemente devuelva el ModelData, ignorando los datos de paginación. También he reemplazado Equals y GetHashCode para permitir comparar dos objetos de PagedModel por sus ModelData, PageNumber, TotalPages y PageSize.Assert.AreEqual no usa mis sustituciones de .Equals en una implementación de IEnumerable
Aquí está el problema
Dim p1 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
Dim p2 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
p1.Equals(p2) =====> True
Assert.AreEqual(p1, p2) ======> False!
Parece que NUnit está llamando es EnumerableEqual método interno de comparar en lugar de utilizar los métodos que proporcioné Igual a mi PagedModel! ¿Hay alguna manera de anular este comportamiento o tengo que escribir una declaración personalizada?
Lo que esta respuesta está diciendo es que esencialmente en su implementación necesita implementar explícitamente IEquatable .Equals ... ver http://stackoverflow.com/questions/1577149/explite-interface-implementation-in-vb-net –
Jay
No, implementar IEquatable no es suficiente. La implementación de GetHashCode es igual de importante. También es importante comprender que IEnumerable recurre al uso de Equals (objeto) si no implementa IEquatable (vea la cita en mi publicación), por lo que no es absolutamente necesario. –
csauve
Dije explícitamente la implementación de IEquatable.Equals que no debería permitir la recuperación por defecto porque el método sería sobrescrito y la implementación explícita llamaría a dicho método ... – Jay