Ho lavorato con Reflections e volevo ottenere tutti gli attributi dichiarati per una proprietà. Ci sono due proprietà sotto la classe PropertInfo
che sono CustomAttributes
e Attributes
.Attributi vs. CustomAttributes in PropertyInfo
Secondo la MSDN, essi sono spiegate come segue:
Attributi:
Questa struttura rappresenta gli attributi associati a un utente. Tutti i membri dispongono di un set di attributi definiti in relazione al tipo specifico di membro . Gli attributi di proprietà consentono all'utente di sapere se questa proprietà è la proprietà predefinita, una proprietà SpecialName e quindi su.
Nota: L'esempio di codice riportato nella pagina di PropertyInfo.Attributes
non ha nemmeno funziona.
Attributi:
Un array che contiene tutti gli attributi personalizzati applicati a questo membro, o un array con zero elementi se sono definiti attributi.
Tuttavia, quando si esegue questo codice per loro, Attributes
restituisce nulla, mentre i rendimenti CustomAttributes
Required
.
void Main()
{
var attributes = typeof(Myproperty).GetProperty("Caption").CustomAttributes;
//var attributes = typeof(Myproperty).GetProperty("Caption").Attributes;
attributes.Dump(); //Dump is a LinqPad method which dumps everything to the outpu window
}
public class Myproperty
{
private string caption = "Default caption";
[Required]
public string Caption
{
get{return caption;}
set {if(caption!=value) {caption = value;}
}
}
}
Fondamentalmente sono significati leggermente diversi della parola "attributo" qui. Sembra che tu voglia CustomAttributes. –
Ho capito che quello che volevo era "CustomAttributes", ma puoi spiegare qual è la differenza? IMO sembra non fare quello che il suo nome implica. – Tarik
Fondamentalmente, vedere la risposta di Hans. Sono cose molto diverse. Guarda MethodInfo.Attributes per un esempio che potrebbe avere più senso per te - è più simile ai modificatori che possono essere applicati a una proprietà/metodo/ecc. –