C # dinamica Attributo Argomenti
-
11-09-2019 - |
Domanda
C'è un modo per effettuare le seguenti operazioni? I vedere che gli argomenti attributo deve essere un'espressione costante, così come faccio a lavorare intorno a questo? Se io non voglio caricare alcuni proprietà in un datagridview utilizzando vincolante, che cosa è la migliore alternativa?
class TestObj
{
private bool isBrowsable = false;
[Browsable(isBrowsable)]
public string String1
{
get
{
return "Foo";
}
}
[Browsable(isBrowsable)]
public string String2
{
get
{
return "Baz";
}
}
}
Soluzione
È possibile fornire informazioni di tipo personalizzato dinamico in fase di esecuzione mediante l'attuazione della interfaccia ICustomTypeDescriptor -. ma questo è un bel po 'di lavoro a non così semplice come decorare le proprietà con gli attributi
Altri suggerimenti
Per runtime, penso che probabilmente si sta guardando ICustomTypeDescriptor. Se si trattasse di una decisione fase di compilazione, si potrebbe avere utilizzato direttive del compilatore:
#define ISBROWSABLE
#if ISBROWSABLE
[your attribute]
#endif
È possibile caricare il valore di qualche file di configurazione o di database utilizzando approccio simile a Come impostare valore dinamico a mio attributo passando nomi di classi e proprietà, ad esempio
[IsBrowsable ( "classname", "PROPERTYNAME")]
Tuttavia sarà fastidioso per digitare come nomi di stringa, che sono evidenti e in qualche modo dovrebbe essere in grado di determinare da riflessione. Si può cercare di noi strumenti IL tessitore, come PostSharp o Fody. (Credo, che in grado di fare come crede, ma non hanno un esempio solo ora) ☑