TypeDescriptor.GetProperties与Type.GetProperties的区别

7

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

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

var property = ModelInstance.GetType().GetProperty(propertyName);

你会使用前者是因为它更快,而且你只需要查询属性。你会使用后者是因为你需要对其进行操作。还有其他的吗?

我会在应用程序中选择最有意义并且对您来说最易读的方法,然后稍后进行性能分析。 - mellamokb
可能作者试图展示每个API的一个例子。 - J.Merrill
它们两个看起来都足够易读,但在不理解它们之间的区别的情况下,我无法说哪一个比另一个更有意义。我认为这在问题中是隐含的,但也许不是... - Berryl
可能是TypeDescriptor.GetProperties() vs Type.GetProperties()的重复问题。 - nawfal
1个回答

11

通常第一种方法不应该更快,因为内部默认情况下实际上使用的是第二种方法。TypeDescriptor架构在普通反射之上增加了功能(instance.GetType().GetProperty(...)表示)。有关TypeDescriptor架构的更多信息,请参见http://msdn.microsoft.com/en-us/library/ms171819.aspx

通常直接使用反射更快(即上面的第二行),但如果使用了自定义类型提供程序可能会返回与标准反射不同的结果,则可能会使用TypeDescriptor。


4
针对OP的好处:这里的经典例子是DataTable/DataView。反射属性例如.Columns.Rows等,然而描述符属性是表中定义的列。这就是(有点...涉及到ITypedList的一些小谎言)将数据绑定到表格以显示数据列的方式。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接