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";
        }
     }
  }
Était-ce utile?

La solution

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) ☑

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top