2011-09-27 29 views
7

我期待在這裏的MSDN筆者使用在同一類的不同的方法,下面的一些代碼:TypeDescriptor.GetProperties與Type.GetProperties

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

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

你會用前者,因爲它的速度更快,你只需要查詢一個屬性和後者,如果你需要操縱它?還有別的嗎?

+0

我會使用一個在您的應用程序中最有意義的,並且是最易讀的對於性能稍後 – mellamokb

+0

可能作者試圖展示每個API的一個例子 –

+0

他們都似乎足夠的可讀性,但我不能說如果一個更多的s而不理解其中的差異。我認爲這是隱含的問題,但也許不是... – Berryl

回答

11

第一種方法通常不應該更快,因爲默認情況下,它實際上使用第二種方法。在TypeDescriptor架構上的正常反射(其instance.GetType().GetProperty(...)表示的頂部添加了功能。有關TypeDescriptor體系結構的更多信息,請參見http://msdn.microsoft.com/en-us/library/ms171819.aspx

通常使用反射直接更快(以上即你的第二行),但有可能是一個使用TypeDescriptor的原因,如果一些自定義類型提供程序正在使用可能會返回其他結果比標準反射。

+4

對於OP的好處:這裏的經典示例是DataTable/DataView。 * reflection *屬性就像'.Columns','.Rows'等等。然而,* descriptor *屬性是**表中定義的列。這是(排序......在這裏涉及「ITypedList」的一些白色謊言)如何與表的數據綁定顯示數據列。 –

相關問題