Перечисления набираются.
То есть, если у вас есть метод, в котором вы должны передать определенное «состояние», например, методу, вы можете передать только «действительные» аргументы.
Например:
enum OrderState
{
pending = 1,
shipped = 2
}
public IList<Order> GetOrdersInState( OrderState )
{
}
Это хороший пример использования перечислений.
Когда OrderState является int, для которого вы создаете 2 константы, вы не имеете ограничений и можете передавать недопустимые значения. Компилятор не будет жаловаться.
Тем не менее, случай, который вы обсуждаете, я думаю, использование enums не является правильным решением. Неправильное использование int, и следует использовать const int.
Перечисления хороши, но их следует использовать там, где они должны использоваться. Они не являются предпочтительным инструментом в любой ситуации.
Наличие const или static var в этом случае не является антипаттерном.