TypeDescriptor.GetProperties против Type.GetProperties - PullRequest
7 голосов
/ 27 сентября 2011

Я смотрю на некоторый код, где автор MSDN использует следующее в различных методах одного и того же класса:

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

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

Вы бы использовали первое, потому что оно быстрее, и вам нужно только запросить свойство, а второе, если вам нужно манипулировать им? Что-то еще?

1 Ответ

11 голосов
/ 27 сентября 2011

Первый метод, как правило, не должен быть быстрее, так как по умолчанию он использует второй метод.Архитектура TypeDescriptor добавляет функциональность поверх обычного отражения (которое представляет instance.GetType().GetProperty(...). См. http://msdn.microsoft.com/en-us/library/ms171819.aspx для получения дополнительной информации об архитектуре TypeDescriptor.

В целом прямое использование отражения быстрее (т. Е. Ваш второйстрока выше), но может быть причина для использования TypeDescriptor, если используется какой-либо пользовательский поставщик типов, который может возвращать результаты, отличные от стандартного отражения.

...