2012-09-18 5 views
11

Ich habe eine Klasse von String-Konstanten, wie kann ich durchschleifen, um die Zeichenfolge zu erhalten und eine Liste aufzufüllen?Iterate durch Eigenschaften der statischen Klasse, um Liste aufzufüllen?

static class Fields 
{ 
    static readonly string FirstName = "FirstName"; 
    static readonly string LastName = "LastName"; 
    static readonly string Grade = "Grade"; 
    static readonly string StudentID1 = "StudentID"; 
    static readonly string StudentID2 = "SASINumber"; 
} 

public partial class SchoolSelect : Form 
{ 
    public SchoolSelect() 
    { 
     InitializeComponent(); 

     //SNIP 

     // populate fields 
     //Fields myFields = new Fields(); // <-- Cant do this 
     i = 0; 
     foreach (string field in Fields) // ??? 
     { 
      fieldsBox.Items.Insert(i, Fields ??? 
     } 
    } 

Ich kann keine neue Instanz von Fields erstellen, da es eine statische Klasse ist. Wie bekomme ich alle Felder in die Listbox, ohne sie manuell einzufügen?

Antwort

17

try Reflexion mit somethin wie folgt aus:

(NEUFASSUNG)

 Type type = typeof(Fields); // MyClass is static class with static properties 
     foreach (var p in type.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)) 
     { 
      var v = p.GetValue(null); // static classes cannot be instanced, so use null... 
      //do something with v 
      Console.WriteLine(v.ToString()); 
     } 
+3

Weil Sie für Felder (in der Frage) suchen und nicht die Eigenschaften, sollten Sie type.GetFields() verwenden, und vielleicht sogar ein BindingFlag als Parameter der Methode hinzufügen, wie BindingFlags.Static (nicht sicher, der genaue Name) –

+0

@Chery: Aaahh .... + 1 – Cybermaxs

+0

Funktioniert jetzt, danke! – pdizz