2016-04-22 17 views
1

x.GetType().GetProperty("Foo")で取得するオブジェクトの実際のタイプがSystem.Reflection.PropertyInfoではなく、System.Reflection.RuntimePropertyInfoであることがわかりました。System.Reflection.RuntimePropertyInfoとは何ですか、それをどのように比較しますか?

このタイプのドキュメントはmsdnや他の場所には表示されません。

私の実際の問題は、リファレンス比較の2つのプロパティから大きくなります。私はサードパーティのライブラリからプロパティを受け取り、同じタイプの.GetProperty("Foo")で取得したプロパティと比較します。私はプロパティが同じオブジェクトであることを期待していました(デバッグ中に "Locals"ウィンドウの同じプロパティのように見えます)が、(GetHashCodeの結果が異なります)。だから、私はそれが何らかの形で、実際のタイプのプロパティオブジェクトであるSystem.Reflection.RuntimePropertyInfoと関係していると思います。

System.Reflection.RuntimePropertyInfoとは何ですか?それを比較する方法?通常どおりに動作しますかPropertyInfo

+1

(プロパティが一致しない)私は[MCVE]まず、あなたはまだそれを理解していないかどうかを見るよりを考え出すお勧めします - (この1つはRuntimePropertyInfoについてですとして)新しい質問をするよりも、 –

+0

@AlexeiLevenkov問題を特定することは私を助けました。私は次の質問をしています:http://stackoverflow.com/questions/36799386/how-to-compare-same-propertyinfo-with-different-reflectedtype-values – astef

答えて

4

RuntimePropertyInfoは内部実装です。 PropertyInfoであり、実際にはGetPropertyPropertyInfo(下位タイプがRuntimePropertyInfoであっても)を返します。

サードパーティ製のlibはおそらくあなたとは異なるタイプのプロパティを取得していますか?

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

trueを返します。

2

PropertyInfoは抽象クラスであり、RuntimePropertyInfoPropertyInfoの具体的な実装です。

Type.GetProperties()またはType.GetProperty()と呼び出すと、実際にはRuntimePropertyInfoが返されます。

サードパーティ製のlibのタイプシグネチャの違いにより、参照が一致しない理由が考えられます。あなたの実際の問題のために

関連する問題