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";
        }
     }
  }
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top