Comprarar dos Objectos

29/08/2005 - 17:51 por carlos | Informe spam
Hola a todos, estoy intentando comprar dos objetos para saber si son iguales
en valor no en tipo.
Empeze implementando el interfaz IComparer, pero no es lo que busco ya que
comprar tipos no valor.
Un saludo.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
29/08/2005 - 21:57 | Informe spam
"carlos" wrote in message
news:
Hola a todos, estoy intentando comprar dos objetos para saber si son


iguales
en valor no en tipo.
Empeze implementando el interfaz IComparer, pero no es lo que busco ya que
comprar tipos no valor.




Dentro de tu Clase, haz un override del método Equals que heredas de
System.Object. Dentro de tu Equals, compara las propiedades de tu objeto que
consideres que determinan el valor de forma unívoca. Llama a Equals cuando
quieras comparar objetos por valor.
Respuesta Responder a este mensaje
#2 carlos
30/08/2005 - 10:40 | Informe spam
Grcias por todo pero al poner overrides me da un error , y me comenta que lo
q hay que hacer es poner overloads-


"A.Poblacion" escribió:

"carlos" wrote in message
news:
> Hola a todos, estoy intentando comprar dos objetos para saber si son
iguales
> en valor no en tipo.
> Empeze implementando el interfaz IComparer, pero no es lo que busco ya que
> comprar tipos no valor.


Dentro de tu Clase, haz un override del método Equals que heredas de
System.Object. Dentro de tu Equals, compara las propiedades de tu objeto que
consideres que determinan el valor de forma unívoca. Llama a Equals cuando
quieras comparar objetos por valor.



Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
30/08/2005 - 16:58 | Informe spam
La forma de hacerlo es mas o menos asi. Tienes que tener en cuenta que al
hacer este cambio todas las posibilidades de comparacion deben dar el mismo
resultado, por eso todas la llamadas terminan en un solo metodo (CompareTo).
Lo unico que faltaria para que fuera totalmente correcto es sobreescribir el
operador =, pero esto no lo puedes hacer en las versiones actuales de VB.NET
(pero si con C# y la version 2005 de VB.NET).

Public Class MiClase
Implements IComparable

' El resto de la clase aqui

Public Overloads Function CompareTo(ByVal obj As MiClase) As Integer

' Aqui haces tu comparacion entre las dos instancias
' devolvieno un numero negativo si "obj" es menor
' 0 si son iguales o un numero positivo si "obj"
' es mayor

End Function

Public Overloads Function CompareTo(ByVal obj As Object) As Integer
Implements System.IComparable.CompareTo

' Es obj de tipo MiClase?
If TypeOf obj Is MiClase Then

' Llamo al metodo que toma MiClase como parametro
Return CompareTo(DirectCast(obj, MiClase))

End If

' No puedo comparar contra otro tipo de objeto
' entonces lanzo una excepcion
Throw New ArgumentException

End Function

Public Overloads Function Equals(ByVal obj As MiClase) As Boolean

' Devuelvo si el resultado de CompareTo es 0,
' lo que quiere decir que los objetos son iguales
Return CompareTo(obj) = 0

End Function

Public Overloads Overrides Function Equals(ByVal obj As Object) As
Boolean

' Es obj de tipo MiClase?
If TypeOf obj Is MiClase Then

' Llamo al metodo que toma MiClase como parametro
Return Equals(DirectCast(obj, MiClase))

End If

' El objeto es de otro tipo, por lo tanto no puede ser igual
Return False

End Function

End Class

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida