30 votes

C # - Récupère les valeurs des propriétés statiques de la classe statique

Je suis en train de faire une boucle par certaines propriétés statiques dans un simple statique de la classe afin de remplir une zone de liste déroulante avec les valeurs de l', mais éprouve des difficultés.

Ici est la classe simple:

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

... et le code de tenter de récupérer les valeurs:

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 je n'ai pas fournir tout de liaison des drapeaux puis-je obtenir environ 57 propriétés, y compris des choses comme Système.De la réflexion.Module Module et toutes sortes d'autres hérité des choses que je ne se soucient pas. Mes 3 déclarée propriétés ne sont pas présents.

Si je approvisionnement en diverses combinaisons d'autres drapeaux, puis il retourne toujours 0 propriétés. Grand.

Importe-t-il que mon statique de la classe est déclarée dans une autre non-statique de la classe?

S'il vous plaît aider! Ce que je fais mal?

42voto

M4N Points 48758

Le problème est que property1..3 ne sont pas des propriétés, mais des champs.

Pour en faire des propriétés, changez-les en:

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

Ou utilisez les propriétés auto et initialisez leurs valeurs dans le constructeur statique de la classe:

 public static string property1 { get; set; }

static MyStaticClass()
{
  property1 = "NumberOne";
}
 

... ou utilisez myType.GetFields(...) si les champs correspondent à ce que vous souhaitez utiliser.

4voto

Nick Berardi Points 31361

Essayez de supprimer BindingFlags.DeclaredOnly , car selon MSDN:

Spécifie que seuls les membres déclarés au niveau de la hiérarchie du type fourni doivent être pris en compte. Les membres hérités ne sont pas pris en compte.

Étant donné que les éléments statiques ne peuvent pas être hérités, cela peut être à l'origine de vos problèmes. J'ai également remarqué que les champs que vous essayez d'obtenir ne sont pas des propriétés. Essayez donc d'utiliser

 type.GetFields(...)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X