Подтвердить что ты не робот

Почему я предпочитаю перечисление структуры с постоянными значениями

Структура с константами:

public struct UserType
{
  public const int Admin=1;
  public const int Browser=2;
  public const int Operator=3;
}

И теперь позвольте использовать перечисление для этой же цели:

public enum UserType
{
  Admin=1,
  Browser,
  Operator
}  

Оба выделены в стеке. В обоих случаях я скажу UserType.Admin. И со структурным способом мне не придется бросать в int, чтобы получить базовое значение. Я знаю, что с версией enum он гарантирует, что будет использоваться одно и только одно из трех значений, тогда как в случае с конструктивной версией любое целое число может быть, что означает любое значение между Int32.MinValue и Int32.MaxValue. Есть ли другое преимущество, предпочитающее перечисления помимо этого?

4b9b3361

Ответ 1

Есть ли другое преимущество предпочтительного перечисления помимо этого?

Clarity.

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

  • Вы не можете случайно присвоить ему какое-то произвольное целочисленное значение. (Вы можете преднамеренно применить любое значение int к типу перечисления, но вам нужно сделать это явно.)
  • Это ясно, какая информация предназначена для представления

Это невероятно важные преимущества при написании кода, который легко поддерживать в будущем. Чем больше вы можете сделать свой код естественным образом описывающим то, что вы пытаетесь достичь, тем лучше.

Ответ 2

Перечисления можно искать из строк или чисел без отражения, например

// VERY important when using ORMs, as databases usually use an int
UserType ut = (UserType)2; 

// Useful when parsing config files like appSettings.
UserType utf = (UserType)Enum.Parse(typeof(UserType),"Admin");

В рамках гораздо больше возможностей для ускорения общих операций с Enums. Другое дело - FlagsAttribute для битполей, что невозможно с помощью const ints.

Проверьте члены класса Enum для получения дополнительных вспомогательных функций, например. GetNames и GetValues.

Ответ 3

Это две разные вещи.

Каждый тип перечисления имеет базовый тип, который может быть любым целым типом, кроме char. Перечисления представляют собой целые типы, которые делают код более понятным и понятным.

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