2012-01-17 203 views
2

代碼我有一個像下面枚舉的列表:動態生成C#

public enum Evaluation : int 
{ 
    //Section 1 

    S1_1_1 = 579, 
    S1_1_2 = 584, 
    S1_1_3 = 589, 
    S1_1_4 = 594, 
    S1_1_5 = 599, 
    S1_1_6 = 604, 

    //Section 2 
    S1_2_1 = 610, 
    S1_2_2 = 615, 
    S1_2_3 = 620, 
    S1_2_4 = 625, 
    S1_2_5 = 630, 
}; 

我想遍歷每個部分,並使用值動態

int S1Count = 6; 

      for (int i = 1; i <= S1Count; i++) 
      { 
       VoteCount += string.IsNullOrEmpty(this.GetEvaluationValue(FormID, Evaluation.S1_1_ + i)) ? 0 : 1; 
      } 

我怎樣才能做到這一點?謝謝。

對不起,我的錯。我試圖通過使用枚舉值來獲取數據庫中的值,我必須計算每個部分的平均值。

+0

也許通過使用反射,但如果他們真的會經常改變'enum'不是保持它們的最佳結構。考慮使用配置文件甚至數據庫表。 – Yuck 2012-01-17 16:42:42

+0

它是固定值,不會經常更改 – TTCG 2012-01-17 16:44:10

+0

那麼爲什麼這樣迭代?只需使用'switch' IMO ... – Yuck 2012-01-17 16:45:33

回答

1

您可以使用Enum.Parse做你想要什麼,我想,儘管我不reccomend它。

要使用enum.Parse你需要做的僅僅是這樣的:使用一些狡猾的方法雖然

Enum.Parse(typeof(Evaluation), String.Format("S1_1_{0}",i)); 

這確實對你指指點點。正如我在上面的評論中所說的,使用數據結構可以讓您更容易區分各個部分及其內容。您可與自定義類或者只是整數的列表的字典做到這一點...

Dictionary<int, List<int>> SectionContents; 

,並用它喜歡:

foreach(int id in SectionContents[sectionNumber]) 
{ 
    VoteCount += string.IsNullOrEmpty(this.GetEvaluationValue(FormID, id)) ? 0 : 1; 
} 

(我不敢保證什麼在foreach ,我只是展示了一個整數列表的字典是如何工作的)。

創建字典非常簡單,不需要枚舉。如果這是數據庫的東西,可以很容易地通過數據庫查詢來生成ID和他們在哪些部分,然後創建數據結構。

0

這將做到這一點

public class Program 
{ 
    public static void Main() 
    { 
     foreach (FieldInfo fInfo in typeof(Evaluation).GetFields(BindingFlags.Public | BindingFlags.Static)) 
     { 
      Console.WriteLine("Evaluation." + fInfo.Name); 
     } 

     Console.ReadLine(); 
    } 
} 
+0

我假設的不同部分的討論是指同一個枚舉中的不同枚舉值,僅由評論區分在每個的頂部。我認爲這意味着必須對foreach中的名稱進行一些解析... – Chris 2012-01-17 17:03:39