Лучшая / распространенная практика использования константных строковых переменных или просто строк в switch / case c #? - PullRequest
0 голосов
/ 23 октября 2018

У меня был следующий сценарий, в котором мне на ум пришло простое исправление, которое предотвратило бы простую ошибку.
Был представлен следующий код:

var dialogAnswer = new SomeActionSheet("Option 1 as string", "Option 2 as string", "Option 3 as string");

switch(dialogAnswer)
{
    case "Option 1 as string":
        DoSomething();
        break;
    case "Option 2 as string":
        DoSomething();
        break;
}

Позже одна строка варианта ответа былаизменился в диалоге, но был забыт в переключателе / ​​случае, что привело к тому, что ничего не произошло, поскольку отсутствовал также случай «по умолчанию».
Мне пришло в голову, что это можно было бы легко предотвратить, если бы яиспользовал переменную вместо строки.И так как switch / case допускает только константы, мне пришлось бы использовать что-то вроде:

private const string answerOption1 = "Option 1 as string";

Но если я смотрю в более крупные проекты, я никогда / редко видел случай переключения, где использовались постоянные строковые переменные.

Итак, мой вопрос: это плохая практика или просто не распространена, и я должен использовать нормальные строки вместо константных переменных в switch / case?Или было бы еще лучше использовать enum в случаях, подобных моему?

1 Ответ

0 голосов
/ 23 октября 2018

Да, как правило, не рекомендуется использовать одну и ту же строку (или любое встроенное значение) несколько раз в одном и том же проекте, поскольку это отклоняется от фундаментального DRY принципа.

Этот принципШироко считается хорошей философией, которой следует следовать, пока не появятся причины, по которым она не может быть эффективно использована в конкретном сценарии.К ним могут относиться случаи снижения производительности или преднамеренное разделение зависимостей для сценариев без разделения ресурсов .Вы не выдвинули на первый план ни одно из этих требований.

Наличие одной константы уменьшит количество ошибок при создании, рефакторинге или удалении кода.

Да, вы можете использовать Enum вместо строки.Это тоже константа.Он также сериализуется в число, может быть упакован как битовые флаги и быстрее оценивается, чем строка неопределенной длины.Это также позволяет избежать проблем с кодировкой.

...