2012-01-17 89 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