C #: ¿Cuál es la diferencia entre TypeDescriptor.GetAttributes () y getType .GetCustomAttributes ()?
-
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?
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 propiedadAttribute.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
.