在C#中动态生成代码

时间:2012-01-17 16:41:14

标签: c# enums eval

我有以下枚举列表:

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

我怎样才能实现这一目标?感谢。

抱歉,我的错误。我试图通过使用ID为枚举值从数据库中获取值,我必须计算每个部分的计数,平均值。

2 个答案:

答案 0 :(得分:1)

你可以使用Enum.Parse来做我想要的事情,虽然我不推荐它。

要使用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中的内容,我只是在演示一个int列表的字典是如何工作的。)

创建词典很简单,不需要枚举。如果这是数据库,可以通过数据库查询轻松生成内容,以获取ID及其所在的部分,然后创建数据结构。

答案 1 :(得分: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();
    }
}