C # dynamique Attribut Arguments
-
11-09-2019 - |
Question
Y at-il un moyen de faire ce qui suit? Je voir que les arguments d'attribut doit être une expression constante, alors comment pourrais-je travailler autour de cela? Si je ne veux pas charger certains propriétés dans un datagridview en utilisant la liaison, ce qui est la meilleure alternative?
class TestObj
{
private bool isBrowsable = false;
[Browsable(isBrowsable)]
public string String1
{
get
{
return "Foo";
}
}
[Browsable(isBrowsable)]
public string String2
{
get
{
return "Baz";
}
}
}
La solution
Vous pouvez fournir des informations de type personnalisé dynamique à l'exécution en mettant en œuvre le l'interface de ICustomTypeDescriptor -. mais cela est tout à fait un peu de travail à peu près pas aussi simple que les propriétés de décoration avec des attributs
Autres conseils
Pour l'exécution, je pense que vous êtes probablement à ICustomTypeDescriptor. Si elle était une décision de compilation, vous auriez pu utiliser les directives du compilateur:
#define ISBROWSABLE
#if ISBROWSABLE
[your attribute]
#endif
Vous pouvez charger la valeur de certains fichiers de configuration ou base de données en utilisant l'approche similaire à Comment définir la valeur dynamique dans mon attribut en passant les noms de classe et de propriété, par exemple
[IsBrowsable ( "nom de classe", "propertyname")]
Cependant, il sera gênant de taper les noms de chaîne, qui sont évidentes et devraient en quelque sorte être en mesure de déterminer de la réflexion. Vous pouvez nous essayer d'outils IL Weaver, tels que PostSharp ou Fody. (Je crois, qu'ils capables de faire une telle pense, mais ne dispose pas d'un exemple tout à l'heure) ☑