Нужно ли включать `None = 0` в типы перечисления битовых флагов? - PullRequest
0 голосов
/ 21 февраля 2019

В официальном документе значение 0 присваивается элементам, означающим «флаги не установлены» (например, None = 0), так почему я должен использовать его в моем перечислении?Могу ли я объявить перечисление без него?

Я попытался написать перечисление без None = 0, и компиляция прошла успешно.

1 Ответ

0 голосов
/ 21 февраля 2019

Это сильное предложение, а не правило.Веские причины следовать предложению правило :

  • Согласованность.Это часть рекомендаций , которые Microsoft публикует с первого дня .NET, и за ней следуют почти все перечисления, которые вы найдете в каркасе и в стороннем коде.

  • Это означает, что default(YourEnum) имеет значение, определенное в вашем перечислении.

  • Это означает, что YourEnum variable = 0 (единственное Неявное преобразование перечисления ) имеет определенное значениев вашем перечислении.

Причины, по которым не следует этому правилу:

  • Это не применяется ни одним предупреждением или ошибкой компилятора

  • ...

Итак, да, вы можете, но я настоятельно рекомендую не делать этого.

В отличие от других значений базового числатипа, вы можете получить 0 s без явных приведений (как показано выше).Вы будете встречать эти значения, и поэтому вам понадобится , чтобы написать код, который в любом случае имеет дело с этим 0.Дайте ему имя.Дайте ему рекомендованное имя.

(Конечно, я бы также рекомендовал быть исчерпывающим во всем коде, связанном с enum, и иметь разумные способы работы со всеми значениями вне диапазона, кромене-0 доступны только через явное приведение)

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