考虑下面的代码。

Object obj;
PropertyDescriptorCollection A = TypeDescriptor.GetProperties(obj);
PropertyInfo[] B = obj.GetType().GetProperties(); // EDIT*

我试图了解A和B之间的区别。据我所知, TypeDescriptor.GetProperties()将返回自定义的 TypeDescriptor 属性,其中,与 Type.GetProperties()一样,它将仅返回其固有的“真实”属性物体。这是正确的吗?如果obj没有任何自定义 TypeDescriptor 属性,则它默认情况下也将返回对象的字面固有属性。

* EDIT之前的原始第二行代码(返回值错误):

最佳答案

obj.GetType().GetProperties()不返回PropertyDescriptorCollection,而是返回System.Reflection.PropertyInfo[]。正如您所建议的,PropertyInfo类仅表示在对象上创建的实际属性。 PropertyDescriptorPropertyDescriptor类的自定义具体子级(由定义自定义描述符的类型实现),或者是密封内部类ReflectPropertyDescriptor的实例,该实例使用PropertyInfo类提供属性的动态调用。

因此,对于一个未定义自定义描述符的类,您将在功能上返回相同的对象,尽管PropertyDescriptor提取了PropertyInfo

10-06 01:34