Сравнение двух полей с использованием FieldInfo.GetValue без знания MemberType - PullRequest
0 голосов
/ 04 апреля 2011

Учитывая имя поля, которое существует в классе (public) и не зная тип поля, можно ли сравнить это поле в экземпляре класса с тем же полем в другом экземпляре того же класса? Я пытаюсь сделать это для функции «ValueHasChanged», что-то вроде следующего:

Protected Function ValueHasChanged(ByVal fieldName as String) As Boolean
    Dim presentFieldInfo = presentInstance.GetType().GetField(fieldName)
    Dim originalFieldInfo = originalInstance.GetType().GetField(fieldName)
    Return presentFieldInfo.GetValue(presentInstance) <> originalFieldInfo.GetValue(originalInstance)
End Function

Строка Return порождает ошибку компилятора о невозможности сравнить операнды типа Object для оператора '=', что, конечно, имеет смысл. Есть ли способ, которым я могу привести значения или сделать это по-другому, без необходимости проверять тип поля и писать длинный оператор switch / if ... elseif?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Как насчет простого использования System.Object.Equals (после того, как вы проверили ничего)? Это не будет работать для некоторых типов, но многие типы перегружают метод Equals.

1 голос
/ 04 апреля 2011

Возможно, вы захотите попробовать функцию .Equals, которая является членом Object, и возвращает true или false независимо от того, равны они или нет.Конечно, базовый объект должен реализовывать Equals в правильном направлении.

http://msdn.microsoft.com/en-us/library/system.object.equals(v=VS.90).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...