2012-09-18 17 views
11

Ho una classe di costanti di stringa, come posso eseguire il ciclo di ricerca per ottenere la stringa e compilare una casella di riepilogo?Iterate attraverso le proprietà della classe statica per popolare l'elenco?

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 ??? 
     } 
    } 

Non riesco a creare una nuova istanza di Campi perché è una classe statica. Come posso ottenere tutti i campi nella casella di riepilogo senza inserire manualmente ciascuno di essi?

risposta

17

prova Riflessione con qualcosa di simile:

(VERSIONE AGGIORNATA)

 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

perché siete alla ricerca per i campi (in questione) e non le proprietà, si dovrebbe usare type.GetFields(), e forse anche aggiungere un BindingFlag come parametro al metodo, come BindingFlags.Static (non è sicuro del nome esatto) –

+0

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

+0

Funziona ora, grazie! – pdizz

Problemi correlati