2012-09-18 8 views
11

Mam klasę stałych ciągów znaków, w jaki sposób mogę przejść przez pętlę, aby uzyskać ciąg znaków i zapełnić pole listy?Powtórz przeglądanie właściwości klasy statycznej, aby wypełnić listę?

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

Nie mogę utworzyć nową instancję Fields ponieważ jego klasy statyczne. Jak mogę uzyskać wszystkie pola w polu listy bez ręcznego wstawiania każdego z nich?

Odpowiedz

17

try Odbicie z Czegoś takiego:

(aktualna wersja)

 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

Ponieważ szukasz pól (w pytaniu), a nie właściwości, należy użyć type.GetFields() i może nawet dodać BindingFlag jako parametr do metody, jak BindingFlags.Static (nie jestem pewien dokładnej nazwy) –

+0

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

+0

Działa teraz, dzięki! – pdizz