C #: O que é a diferença entre TypeDescriptor.GetAttributes () e GetType .GetCustomAttributes ()?

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

  •  11-09-2019
  •  | 
  •  

Pergunta

Tome essas duas coisas de código:

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

E

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

Se a aparência de classe como:

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

Onde RequiredIfOtherPropertyIsNotEmpty é um ValidationAttribute e tem AllowMultiple = true.

O primeiro retorna um dois atributos, o segundo retorna um.

Qual é a diferença que faria isso?

Foi útil?

Solução

A partir página MSDN sobre TypeDescriptor.GetAttributes :

Para retornar várias instâncias de um atributo AttributeUsageAttribute.AllowMultiple do AttributeCollection, seu atributo deve substituir a propriedade Attribute.TypeId.

Para responder à pergunta geral "o que é a diferença?": Os valores retornados por TypeDescriptor pode ser estendido em tempo de execução, enquanto que aqueles em Type não pode. A página MSDN I ligada à explica mais.

Se você não precisa deste tipo de extensão de tempo de execução, ea maneira alças TypeDescriptor vários atributos é um problema, você é provavelmente melhor fora com Type.GetCustomAttributes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top