TypeDescriptor.GetProperties与Type.GetProperties

Ber*_*ryl 6 c# reflection typedescriptor

我正在查看一些代码,其中MSDN作者在同一个类的不同方法中使用以下内容:

if ( TypeDescriptor.GetProperties(ModelInstance)[propertyName] != null ) return;

var property = ModelInstance.GetType().GetProperty(propertyName);
Run Code Online (Sandbox Code Playgroud)

你会使用前者,因为它更快,你只需要查询一个属性,后者是否需要操作它?别的什么?

DeC*_*Caf 10

第一种方法通常不应该更快,因为内部默认它实际上使用第二种方法.TypeDescriptor体系结构在常规反射之上添加了功能(instance.GetType().GetProperty(...)代表.有关TypeDescriptor体系结构的更多信息,请参阅http://msdn.microsoft.com/en-us/library/ms171819.aspx.

通常直接使用反射更快(即上面的第二行),但是如果使用某些自定义类型提供程序可能会返回除标准反射之外的其他结果,则可能有使用TypeDescriptor的原因.

  • 为了OP的好处:这里的经典示例是DataTable/DataView.*reflection*属性类似于`.Columns`,`.Rows`等.但*descriptor*属性是**表**中定义的列.这是(某种白色 - 这里涉及`ITypedList`),如何对表的数据绑定显示数据列. (4认同)