使用FieldInfo.GetValue比较两个字段,而不知道MemberType

时间:2011-04-04 19:51:45

标签: .net vb.net reflection

给定一个类(公共)上存在的字段的名称而不知道字段类型,是否可以将该类实例上的该字段与同一类的另一个实例上的同一字段进行比较?我正在尝试为“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的操作数,当然这是有道理的。是否有一种方法可以转换值或以不同方式执行此操作而无需测试字段的类型并编写长开关/ if ... elseif语句?

2 个答案:

答案 0 :(得分:3)

如何简单地使用System.Object.Equals(一旦你检查了什么)?这对某些类型不起作用,但许多类型会重载Equals方法。

答案 1 :(得分:1)

您可能想尝试.Equals函数,它是Object的成员,并返回true或false,无论两者是否相等。 当然,底层对象必须以正确的方式实现Equals。

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