过滤TypeDescriptor.GetProperties()返回的属性,具体取决于它们声明的类

时间:2009-09-18 08:53:07

标签: c# .net reflection typedescriptor

嘿伙计们。我有以下情况。

我想使用TypeDescriptor来获取某种类型的属性。继承层次结构中类型的深度可能会有所不同。我只想获得在类型本身声明的属性,而不是在父类(base)中。问题是,当我调用TypeDescriptor.GetProperties()时,它会将继承层次结构中声明的所有内容返回到Object。

我只看到我可以按属性过滤输出,但我不想为此类型中的属性添加另一个属性。让他们通过反射而不使用TypeDescriptor会做我想要的,但对我来说不是一个选项,因为某些属性会在某些时候动态添加到类型中。

有什么想法吗?如果问题不明确,我可以提供一个例子。

2 个答案:

答案 0 :(得分:7)

您可以使用ComponentType属性过滤属性:

var properties = from p in TypeDescriptor.GetProperties(x).Cast<PropertyDescriptor>()
                 where p.ComponentType == x.GetType()
                 select p;

答案 1 :(得分:1)

您是否只能修改ICustomTypeDescriptor的实施以反映您想要的行为?