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

J’essaie de parcourir certaines propriétés statiques dans une classe statique simple afin de remplir une boîte combinée avec leurs valeurs, mais j’ai des difficultés.

Voici la classe simple:

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

… et le code tentant 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).ToSsortingng()); } 

Si je ne fournis pas d’indicateurs de liaison, j’obtiens environ 57 propriétés, y compris des choses comme System.Reflection.Module Module et toutes sortes d’autres choses héritées dont je ne me soucie pas. Mes 3 propriétés déclarées ne sont pas présentes.

Si je fournis différentes combinaisons d’autres indicateurs, il renvoie toujours 0 propriétés. Génial.

Est-ce important que ma classe statique soit réellement déclarée dans une autre classe non statique?

Qu’est-ce que je fais mal?

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

Pour les rendre propriétés, changez-les en:

 private static ssortingng _property1 = "NumberOne"; public static ssortingng 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 ssortingng property1 { get; set; } static MyStaticClass() { property1 = "NumberOne"; } 

… ou utilisez myType.GetFields(...) si les champs sont ce que vous voulez utiliser.

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 static ne peut pas être hérité, cela peut être à l’origine de vos problèmes. J’ai aussi remarqué que les champs que vous essayez d’obtenir ne sont pas des propriétés. Alors essayez d’utiliser

 type.GetFields(...)