2009-08-20 15 views
7

Mögliche Duplizieren:
Type.GetFields() - only returning “public const” fieldsReflecting konstante Eigenschaften/Felder in .net

Ich habe eine Klasse, die wie folgt aussieht wie folgt:

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 wird es versuchen, reflektieren selbst. Ich weiß, wie man Felder EINS, & ZWEI widerspiegelt. Aber woher weiß ich, ob es eine Konstante ist oder nicht?

+4

Effektiv betrügen von http://StackOverflow.com/Questions/1287797 –

+0

Ich nehme das zurück ... Ich kann die Felder ONE & TWO nicht finden. – deostroll

+0

Sie sind nicht nur Felder, sie sind statische Felder, keine Instanzfelder. –

Antwort

16

Das ist, weil sie Felder sind, nicht Eigenschaften. Versuchen:

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

Edit: DataDink das Recht, es ist glatter IsLiteral

+0

uh yeah realisierte es zu spät ... Ja ist irgendetwas im Wesentlichen auch statisch? – deostroll

+0

DataDinks Antwort ist eigentlich ein wenig glatter. Und ja; Versuchen Sie, && info.IsStatic hinzuzufügen. –

+0

wht ist der Unterschied zwischen IsLiteral & IsStatic, wenn beide wahr sind? – deostroll

5

Fieldinfo verwenden, um Objekte tatsächlich eine Tonne "IsSomething" booleans Recht auf sie:

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

Welche Sie speichert ein winziges eine Menge Code über die Überprüfung der Attribute sowieso.