Pregunta

¿Hay una manera de hacer lo siguiente? Me ver que los argumentos de atributo debe ser una expresión constante, Entonces, ¿cómo iba yo a trabajar alrededor de esto? Si no quiero cargar algunos propiedades en un DataGridView utilizando unión, cuál es la mejor alternativa?

  class TestObj
  {
     private bool isBrowsable = false;

     [Browsable(isBrowsable)]
     public string String1
     {
        get
        {
           return "Foo";
        }
     }
     [Browsable(isBrowsable)]
     public string String2
     {
        get
        {
           return "Baz";
        }
     }
  }
¿Fue útil?

Solución

Puede proporcionar información de tipo personalizado dinámica en tiempo de ejecución mediante la implementación de la interfaz ICustomTypeDescriptor -. pero esto es un poco de trabajo en no es tan simple como la decoración de propiedades con los atributos

Otros consejos

En tiempo de ejecución, creo que es probable que esté buscando en ICustomTypeDescriptor. Si se tratara de una decisión en tiempo de compilación, se podría haber utilizado las directivas del compilador:


 #define ISBROWSABLE
 #if ISBROWSABLE
 [your attribute]
 #endif

Puede cargar el valor de algún archivo de configuración o base de datos utilizando el enfoque similar al Cómo establecer valor dinámico en mi Atributo haciendo pasar nombres de clase y de propiedad, por ejemplo

[IsBrowsable ( "nombre de clase", "propertyname")]

Sin embargo, será molesto para escribir como nombres de cadena, que son obvias y de alguna manera debe ser capaz de determinar a partir de la reflexión. Se puede tratar de herramientas IL Tejedor, como PostSharp o Fody. (Creo, que capaz de hacer tal piensa, pero no tienen un ejemplo en este momento) ☑

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top