variable usar son qué programacion metodos metodo los estáticos estaticos cuando clase atributos c# reflection class static properties

usar - C#- Obtener valores de propiedades estáticas de la clase estática



variable static c# (2)

Estoy intentando recorrer algunas propiedades estáticas en una clase estática simple para rellenar un cuadro combinado con sus valores, pero estoy teniendo dificultades.

Aquí está la clase simple:

public static MyStaticClass() { public static string property1 = "NumberOne"; public static string property2 = "NumberTwo"; public static string property3 = "NumberThree"; }

... y el código que intenta recuperar los valores:

Type myType = typeof(MyStaticClass); PropertyInfo[] properties = myType.GetProperties( BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); foreach (PropertyInfo property in properties) { MyComboBox.Items.Add(property.GetValue(myType, null).ToString()); }

Si no proporciono ninguna marca vinculante, obtengo unas 57 propiedades que incluyen cosas como System.Reflection.Module Module y todo tipo de otras cosas heredadas que no me interesan. Mis 3 propiedades declaradas no están presentes.

Si proporciono varias combinaciones de otros indicadores, siempre devuelve 0 propiedades. Estupendo.

¿Importa que mi clase estática sea realmente declarada dentro de otra clase no estática?

¿Qué estoy haciendo mal?


El problema es que property1..3 no son propiedades, sino campos.

Para hacer que las propiedades los cambien a:

private static string _property1 = "NumberOne"; public static string property1 { get { return _property1; } set { _property1 = value; } }

O use propiedades automáticas e inicialice sus valores en el constructor estático de la clase:

public static string property1 { get; set; } static MyStaticClass() { property1 = "NumberOne"; }

... o use myType.GetFields(...) si los campos son los que quiere usar.


Intente eliminar BindingFlags.DeclaredOnly , ya que de acuerdo con MSDN:

Especifica que solo se deben considerar los miembros declarados en el nivel de la jerarquía del tipo suministrado. Los miembros heredados no son considerados.

Dado que no se puede heredar de static, esto podría estar causando sus problemas. También noté que los campos que intentas obtener no son propiedades. Entonces intenta usar

type.GetFields(...)