2009-08-07 4 views
6

J'ai une classe comme ceci:Type.GetProperties Méthode

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

et quand j'écris ceci:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

je reçois un tableau vide pour les accessoires.

Pourquoi? Est-ce parce que GetProperties n'inclut pas les propriétés automatiques?

+6

'Google:' si vous ne pouvez toujours pas obtenir vos « propriétés », même après la mise en drapeaux, si vous êtes nouveau à C# et ne connaissez pas la différence entre 'Properties' et' Fields', essayez d'utiliser 'GetFields()'. Vous avez probablement cherché des 'fields' tout le long! – user1306322

Répondre

18

Le problème est que GetProperties ne retournera que les propriétés publiques par défaut. En C#, les membres ne sont pas publics par défaut (je crois qu'ils sont internes). Essayez ceci à la place

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

L'énumération BindingFlags est assez flexible. La combinaison ci-dessus renvoie toutes les propriétés d'instance non publiques sur le type. Ce que vous voulez probablement, cependant, c'est toutes les propriétés d'instance, indépendamment de l'accessibilité. Dans ce cas, essayez de tous ceux qui viennent les éléments suivants

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

Merci, je ne m'en suis pas rendu compte. Comment pouvez-vous fournir plusieurs options pour un seul argument? Les bits BindingFlags sont-ils décalés? –

+1

@Joan, oui. BindingFlags est une énumération qui utilise des indicateurs de bits que vous pouvez manipuler avec |. Il ne fournit pas d'arguments multiples, créant simplement une valeur d'énumération avec différentes combinaisons de bits. – JaredPar

+1

Joan: Les drapeaux de liaison sont une énumération de drapeaux, de sorte que vous pouvez utiliser | pour passer plusieurs drapeaux dans la fonction. –

Questions connexes