2016-04-22 74 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簽名差異。