2009-08-20 7 views
7

Possible en double:
Type.GetFields() - only returning “public const” fieldsdes propriétés réfléchissantes constantes/champs .net

J'ai une classe qui ressemble comme suit:

public class MyConstants 
{ 
    public const int ONE = 1; 
    public const int TWO = 2; 

    Type thisObject; 
    public MyConstants() 
    { 
     thisObject = this.GetType(); 
    } 

    public void EnumerateConstants() 
    { 
     PropertyInfo[] thisObjectProperties = thisObject.GetProperties(BindingFlags.Public); 
     foreach (PropertyInfo info in thisObjectProperties) 
     { 
      //need code to find out of the property is a constant 
     } 
    } 
} 

Bascially il tente de réfléchir lui-même. Je sais comment refléter les champs UN, & DEUX. Mais comment savoir si c'est une constante ou non?

+4

Effectivement dupe de http://stackoverflow.com/questions/1287797 –

+0

Je prends ça en arrière ... Je ne trouve pas les champs UN et DEUX. – deostroll

+0

Ce ne sont pas seulement des champs, ce sont des champs statiques, pas des champs d'instance. –

Répondre

16

C'est parce que ce sont des champs, pas des propriétés. Essayez:

public void EnumerateConstants() {   
     FieldInfo[] thisObjectProperties = thisObject.GetFields(); 
     foreach (FieldInfo info in thisObjectProperties) { 
      if (info.IsLiteral) { 
       //Constant 
      } 
     }  
    } 

Edit: droit de DataDink, il est plus lisse à utiliser IsLiteral

+0

euh ouais l'a réalisé trop tard ... Yeah est quelque chose de const essentiellement statique aussi? – deostroll

+0

La réponse de DataDink est en fait un peu plus lisse. Et oui; essayez d'ajouter && info.IsStatic. –

+0

Quelle est la différence entre IsLiteral et IsStatic si les deux sont vraies? – deostroll

5

FieldInfo objets ont en fait une tonne de "IsSomething" booléens droit sur eux:

var m = new object(); 
foreach (var f in m.GetType().GetFields()) 
if (f.IsLiteral) 
{ 
    // stuff 
} 

Ce qui vous permet d'économiser un petit ammount de code sur vérifier les attributs de toute façon.

Questions connexes