Сделать этот фрагмент кода лучше - PullRequest
0 голосов
/ 15 апреля 2011

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

foreach (string section in DataAccessLayer.AcceptedSections)
{
    switch (section)
    {
        case "Section1":
            Console.WriteLine("Section 1");
            break;
        case "Section2":
            Console.WriteLine("Section 2");
            break;
        case "Section3":
            Console.WriteLine("Section 3");
            break;
        default:
            Console.WriteLine("Default section");
            break;
    }                    
}

В любом случае я могу сделать то, что этот код делает, не предоставляя строку раздела снова в случае? DataAccessLayer.AcceptedSections является динамическим, и я не хочу добавлять в мой код еще один случай с разделами, перестраивать и заново развертывать каждый раз, когда появляется новый раздел.Сегодня пятница, и мой разум работает не очень хорошо.

Например: Я не хочу добавлять следующий код при добавлении Раздела 4 в базу данных:

case "Section4":
    Console.WriteLine("Section 4");
     break;

Ответы [ 3 ]

5 голосов
/ 15 апреля 2011

Если строка всегда "SectionN", вы можете просто обработать ее напрямую:

if (section.StartsWith("Section"))
    Console.WriteLine(section.Insert(7, " "));
else
    Console.WriteLine("Default Section");
3 голосов
/ 15 апреля 2011

Имейте Dictionary<string,Action<T>>, который набирается section. Это полностью заменит оператор switch.

Вызовите соответствующее действие:

foreach (string section in DataAccessLayer.AcceptedSections)
{
    myActionsDictionary[section]();
}
1 голос
/ 15 апреля 2011

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

Таблица AcceptedSections

Name = "Section1"
DisplayName = "Section 1"

Тогда вы можете просто вернуть DisplayName


Если это не так, вам придется обрабатывать это так, как вы делаете сейчас, или вы можете создать перечисление с атрибутом для отображения:

public enum AcceptedSections
{
    [Description("Default Section")]
    Default,
    [Description("Section 1")]
    Section1,
    [Description("Section 2")]
    Section2,
    [Description("Section 3")]
    Section3,
    [Description("Section 4")]
    Section4
}
// writing this made me kind woozy... what a terrible enum

, который позволит вам написать что-то вроде этого:

foreach (AcceptedSections section in AcceptedSections.GetValues())
{
    Console.WriteLine(section.GetDescription());
}

где GetDescription() - простой метод, который возвращает этот пользовательский атрибут в перечислении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...