C #: ¿Cuál es la diferencia entre TypeDescriptor.GetAttributes () y getType .GetCustomAttributes ()?

StackOverflow https://stackoverflow.com/questions/1833288

  •  11-09-2019
  •  | 
  •  

Pregunta

Tome estas dos cosas de código:

instance.GetType()
 .GetCustomAttributes(true)
 .Where(item => item is ValidationAttribute);

y

TypeDescriptor.GetAttributes(instance)
 .OfType<ValidationAttribute>();

Si la clase se ve así:

[RequiredIfOtherPropertyIsNotEmpty("State", "City", ErrorMessage = ErrorDescription.CreateAccount_CityRequiredWithState)]
[RequiredIfOtherPropertyIsNotEmpty("State", "Address1", ErrorMessage = ErrorDescription.CreateAccount_Address1RequiredWithState)]
public class ManagePostModel
{
   ...
}

Cuando RequiredIfOtherPropertyIsNotEmpty es un ValidationAttribute y tiene AllowMultiple = true.

El primero devuelve dos atributos, la segunda devuelve uno.

¿Cuál es la diferencia que podría causar esto?

¿Fue útil?

Solución

la página de MSDN en TypeDescriptor.GetAttributes :

  

Con el fin de volver varias instancias de un atributo de la AttributeUsageAttribute.AllowMultiple AttributeCollection, el atributo debe reemplazar la propiedad Attribute.TypeId.

Para responder a la pregunta general "¿cuál es la diferencia?": Los valores devueltos por TypeDescriptor se pueden extender en tiempo de ejecución, mientras que los de Type no puede. La página de MSDN he vinculado explica más.

Si usted no necesita este tipo de extensión de tiempo de ejecución, y la forma en TypeDescriptor maneja múltiples atributos es un problema, usted es probablemente mejor con Type.GetCustomAttributes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top