TypeDescriptor.GetProperties()によって返されるプロパティを、それらが宣言されているクラスに応じてフィルタリングします
-
22-07-2019 - |
質問
やあみんな。次のような状況があります。
TypeDescriptorを使用して特定のタイプのプロパティを取得したい。継承階層のタイプの深さは異なる場合があります。プロパティは、その親(ベース)ではなく、型自体で宣言したいだけです。問題は、TypeDescriptor.GetProperties()を呼び出すと、継承階層で宣言されたすべてのものがObjectまで返されることです。
属性で出力をフィルタリングできることだけを見ましたが、これだけのために、私のタイプのプロパティに別の属性を追加したくありません。リフレクションを介してそれらを取得し、TypeDescriptorを使用しないことは私が望むことを行いますが、いくつかのプロパティはある時点で型に動的に追加されるため、私にはオプションではありません。
アイデアはありますか?質問が明確でない場合、例を提供できます。
解決
ComponentType
プロパティを使用してプロパティをフィルタリングできます:
var properties = from p in TypeDescriptor.GetProperties(x).Cast<PropertyDescriptor>()
where p.ComponentType == x.GetType()
select p;
他のヒント
希望する動作を反映するために ICustomTypeDescriptor
の実装を変更するだけではいいですか?
所属していません StackOverflow