2008-11-21 107 views
3

我想寫一個接受兩個對象作爲參數的函數,只比較對象中包含的字段。我不知道在設計時什麼類型的對象,但傳遞的對象將是我們的應用程序中使用的類。在VB.NET中比較對象

是否有可能比較對象的字段而不知道它們的類型在運行時?

回答

7

是的,可以在運行時查找對象的字段,屬性和方法。您需要使用System.Reflection並查找匹配的字段,確保數據類型兼容,然後比較這些值。

+0

System.Reflection是我以前記不住的命名空間!感謝一百萬人! – StevenMcD 2008-11-21 19:51:03

2

對於這個工作,我們有我們所有的數據訪問類重寫GetHashCode:例如。

Public Overrides Function GetHashCode() As Integer 
    Dim sb As New System.Text.StringBuilder 

    sb.Append(_dateOfBirth) 
    sb.Append(_notes) 
    sb.Append(Name.LastName) 
    sb.Append(Name.Preferred) 
    sb.Append(Name.Title) 
    sb.Append(Name.Forenames) 

    Return sb.ToString.GetHashCode() 

End Function 

然後比較兩個對象,你可以說

​​

或者更一般地:

object1.GetHashCode = object2.GetHashCode 
+0

好方法。你可以使用反射,但這很簡單,乾淨。我想補充的一件事就是在你的類上實現IComparable。 – codeConcussion 2008-11-21 16:25:25

+0

感謝您的想法,但我需要能夠比較特定的領域,但這將在我們的應用程序的其他地方有用。再次感謝! – StevenMcD 2008-11-21 19:50:24

0

該函數將比較兩個簡單對象(_Objeto1和_Objeto2)。首先,他們一定不是什麼。其次,它們必須是相同的類型(_AnyObject.GetType.ToString)。第三,我們必須遍歷每個屬性並比較它們的值。如果至少有一個屬性具有不同的值,則函數返回FALSE。否則,它返回TRUE。

該函數不考慮複雜對象(它們的一個屬性是另一個對象)。簡單對象是字符串,整數,布爾等

進口系統 進口Microsoft.VisualBasic程序 進口的System.Reflection

公共功能CompararObjetos(BYVAL _Objeto1爲對象,BYVAL _Objeto2作爲對象)爲布爾

Dim _TipoObjeto1 As String = "" 
    Dim _TipoObjeto2 As String = "" 

    If Not _Objeto1 Is Nothing Then 
     _TipoObjeto1 = _Objeto1.GetType.ToString 
    End If 

    If Not _Objeto2 Is Nothing Then 
     _TipoObjeto2 = _Objeto2.GetType.ToString 
    End If 

    Dim _Resultado As Boolean = True 

    If _TipoObjeto1 = _TipoObjeto2 Then 
     Dim Propiedades() As PropertyInfo = _Objeto1.GetType.GetProperties 
     Dim Propiedad As PropertyInfo 
     Dim _Valor1 As Object 
     Dim _Valor2 As Object 
     For Each Propiedad In Propiedades 
      _Valor1 = Propiedad.GetValue(_Objeto1, Nothing) 
      _Valor2 = Propiedad.GetValue(_Objeto2, Nothing) 
      If _Valor1 <> _Valor2 Then 
       _Resultado = False 
       Exit For 
      End If 
     Next 
    Else 
     _Resultado = False 
    End If 

    Return _Resultado 

End Function