C #: Was ist der Unterschied zwischen TypeDescriptor.GetAttributes () und GetType () .GetCustomAttributes?
-
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?
Lösung
die MSDN-Seite auf TypeDescriptor.GetAttributes :
Um mehrere Instanzen eines
AttributeUsageAttribute.AllowMultiple
Attribut aus demAttributeCollection
zurückzukehren, Ihr Attribut muss dieAttribute.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
.