VB.Net 사용. 동일한 클래스의 두 객체에서 속성 값을 가져 와서 비교하려고합니다. 값이 다른 경우 값이 무엇이고 변경된 내용을 나타내는 문자열에 값을 추가하려고합니다. GetValue에 문제가 있습니다.GetValue 및 System.Reflection 사용
이Public Function GetRowChangesList(ByVal Before As IEnumerable(Of Object), ByVal After As IEnumerable(Of Object), ByRef isNew As Boolean) As String
Dim TheseChanges As List(Of String) = Nothing
'any errors, return ""
Try
'If Lists are both empty, return
If Before Is Nothing And After Is Nothing Then
Return ""
End If
'Figure out the object type and make sure before and after match
Dim DataTypeBefore As Type
Dim DataTypeAfter As Type
DataTypeBefore = Before.Single.GetType()
DataTypeAfter = After.Single.GetType()
'if they don't match function won't work
If DataTypeBefore IsNot DataTypeAfter Then
Return ""
End If
Dim myField As PropertyInfo() = Before.Single.GetType().GetProperties()
Dim myField2 As PropertyInfo() = After.Single.GetType().GetProperties()
'Find the changes
Dim index As Integer
For index = 0 To myField2.Length - 1
If Not myField(index).GetValue(Before) = myField2(index).GetValue(After) Then
TheseChanges(0) += ("Change happened at: " + myField(index).Name.ToString + " Values changed from: " +
myField(index).GetValue(Before).ToString + " To " + myField2(index).GetValue(After).ToString)
End If
Next
Catch ex As Exception
'send error
SendErrorEmail(ex, "Saving changes for: '" + Before.Single.GetType().ToString)
End Try
'return
Return TheseChanges(0)
End Function
만 아무것도 전혀 변경하는 경우 변경 한 가지가 있어야한다 : 다음은이 기능에 대한 코드입니다. 이것이 바로 첫 번째 요소를 반환하는 이유입니다. 디버깅 할 때마다 예외가 발생합니다. 그것은 나를주는 오류는 다음과 같습니다 :
If Not myField(index).GetValue(Before) = myField2(index).GetValue(After) Then error BC30199: '(' expected.
TheseChanges(0) = ("Change happened at: " + myField(index).Name.ToString + " Values changed from: " + error BC30201: Expression expected.
myField(index).GetValue(Before).ToString + " To " + myField2(index).GetValue(After).ToString) error BC37237: ')' is not a valid format specifier
End If error BC30201: Expression expected.
Next error BC30201: Expression expected.
편집 : 난 그냥이 방법을 시도하고 여전히 (아래 코드) 같은 오류를 얻었다. 또한 그냥 '='isNot (아무것도 변경하지 않았다) 변경 시도하고 각 값 주위에 괄호 추가 시도하고 또한 아무것도 변경하지 않았다.
If myField(index).GetValue(myField(index).Name) = myField2(index).GetValue(myField(index).Name)
거의 완벽하게 작동했습니다. 그냥 내 도움에 대한 감사, 내 물건에 일부 물건을 변경해야합니다! – MattCucco