2016-04-22 72 views
1

我很惊讶地看到,使用x.GetType().GetProperty("Foo")获得的对象的实际类型不是System.Reflection.PropertyInfo,而是System.Reflection.RuntimePropertyInfo什么是System.Reflection.RuntimePropertyInfo,我该如何比较它?

我没有在msdn或其他地方看到这种类型的文档。

我的实际问题是从参考文献比较两个属性。我从第三方库中收到一个属性,并将其与我在.GetProperty("Foo")上获得的属性进行比较。我期望属性是相同的对象(并且它们在调试时看起来像“本地”窗口中的相同属性),但它们不是(GetHashCode结果不同)。所以,我认为它可以以某种方式与属性对象的实际类型System.Reflection.RuntimePropertyInfo相关。

什么是System.Reflection.RuntimePropertyInfo?如何比较它?它的行为与往常一样PropertyInfo

+1

对于你的实际问题(属性不匹配),我建议首先提出[MCVE],并比看看你是否还不明白 - 比问一个新问题(因为这是关于RuntimePropertyInfo) –

+0

@AlexeiLevenkov隔离问题帮助了我和这里我问了下一个问题:http://stackoverflow.com/questions/36799386/how-to-compare-same-propertyinfo-with-different-reflectedtype-values – astef

回答

4

RuntimePropertyInfo是一个内部实现。它是一个PropertyInfo,事实上,GetProperty返回PropertyInfo(即使底层类型是RuntimePropertyInfo)。

第三方库可能获取与您不同的类型的属性?

new blah().GetType().GetProperty("Test") == new blah().GetType().GetProperty("Test") 

返回true。

2

PropertyInfo是一个抽象类,而RuntimePropertyInfoPropertyInfo的具体实现。

当我们拨打Type.GetProperties()Type.GetProperty()时,他们实际上会返回RuntimePropertyInfo

您得到引用不相等的原因可能是由于第三方库中的Type签名差异。