Динамически генерировать коды в C # - PullRequest
2 голосов
/ 17 января 2012

У меня есть список перечислений вроде следующего:

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

Как мне этого добиться? Спасибо.

Извините, моя ошибка. Я попытался получить значение из базы данных, используя перечислимые значения, которые являются идентификаторами, и мне нужно вычислить среднее значение для каждого раздела.

Ответы [ 2 ]

1 голос
/ 17 января 2012

Вы можете использовать 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, я просто демонстрирую, как может работать словарь из списка целых).

Создание словаря достаточно просто и не требует перечислений.И если это база данных, то ее можно легко сгенерировать с помощью запроса к базе данных, чтобы получить идентификаторы и разделы, в которых они находятся, а затем создать структуру данных.

0 голосов
/ 17 января 2012

Это сделает это

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();
    }
}
...