大家好。我有以下情况。

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

我只看到可以按Attributes过滤输出,但是我不想为此添加另一个属性到我的类型的属性中。通过反射而不使用TypeDescriptor来获取它们将完成我想要的操作,但这对我来说不是一个选择,因为某些属性会在某个时候动态添加到类型中。

有任何想法吗?如果问题不清楚,我可以举个例子。

最佳答案

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

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

08-04 15:20