C #: Was ist der Unterschied zwischen TypeDescriptor.GetAttributes () und GetType () .GetCustomAttributes?

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

  •  11-09-2019
  •  | 
  •  

Frage

Nehmen Sie diese zwei Codes Dinge:

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

Und

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

Wenn die Klasse wie folgt aussieht:

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

Wo RequiredIfOtherPropertyIsNotEmpty ein ValidationAttribute und hat AllowMultiple = true.

Die erste gibt zwei Attribute, die eine zweite zurückkehrt.

Was ist der Unterschied, dass dies dazu führen?

War es hilfreich?

Lösung

die MSDN-Seite auf TypeDescriptor.GetAttributes :

  

Um mehrere Instanzen eines AttributeUsageAttribute.AllowMultiple Attribut aus dem AttributeCollection zurückzukehren, Ihr Attribut muss die Attribute.TypeId Eigenschaft außer Kraft setzen.

Um die allgemeine Frage zu beantworten: „Was ist der Unterschied?“: Die von TypeDescriptor zurückgegebenen Werte können zur Laufzeit verlängert werden, während die in Type nicht. Die MSDN-Seite, die ich im Zusammenhang mit erklärt mehr.

Wenn Sie diese Art von Laufzeitverlängerung nicht benötigen, und die Art und Weise TypeDescriptor verarbeitet mehrere Attribute ist ein Problem, sind Sie wahrscheinlich besser dran mit Type.GetCustomAttributes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top