2011-09-27 4 views
7

que estoy buscando en algún código en la que un autor utiliza la siguiente MSDN en diferentes métodos de la misma clase:TypeDescriptor.GetProperties vs. Type.GetProperties

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

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

¿Usaría el primero porque es más rápido y usted solo necesita consultar una propiedad y la segunda si necesita manipularla? ¿Algo más?

+0

Usaría el que tenga más sentido en su aplicación y es el más legible para usted, y perfíllo para rendimiento más tarde. – mellamokb

+0

Posiblemente el autor estaba tratando de mostrar un ejemplo de cada API. –

+0

Ambos parecen bastante legibles, pero no podría decir si se hizo más s ense que otro sin entender la (s) diferencia (s). Pensé que estaba implícito en la pregunta, pero quizás no ... – Berryl

Respuesta

11

El primer método generalmente no debe ser más rápido ya que internamente, por defecto, en realidad usa el segundo método. La arquitectura TypeDescriptor añade la funcionalidad en la parte superior de la reflexión normales (que instance.GetType().GetProperty(...) representa. Ver http://msdn.microsoft.com/en-us/library/ms171819.aspx para obtener más información acerca de la arquitectura TypeDescriptor.

En general utilizando la reflexión directa es más rápido (es decir, su segunda línea de arriba), pero puede haber una Motivo para usar el TypeDescriptor si algún proveedor de tipo personalizado está en uso y puede arrojar otros resultados que el reflejo estándar.

+4

Para el beneficio de OP: el ejemplo clásico aquí es DataTable/DataView. Las propiedades * reflection * son cosas como '.Columns',' .Rows', etc. Sin embargo, las propiedades del * descriptor * son ** las columnas definidas en la tabla **. esto es (una especie de ... algunas mentiras blancas que implican a 'ITypedList') cómo el enlace de datos a una tabla muestra las columnas de datos. –

Cuestiones relacionadas