Правда ли, что enum- это анти-паттерн и его всячески нужно избегать?
Если да, то почему?
Нет, это миф. Перечисление используется для представления определенной семантики - целочисленный тип с множеством именованных допустимых значений (хоть язык и позволяет присвоить перечислению любые значения, для этого требуется явное приведение, так что типобезопасность соблюдается). Класс с набором статических readonly-полей (или свойств) представляет другую семантику - тип, в котором некоторые значения имеют особый смысл, но другие значения тоже являются допустимыми.
См. например Colors - цвет может принимать любые значения из непрерывного диапазона RGBA-последовательностей, но для ряда часто используемых сделаны константы.
Другое дело, что иногда enum используют как замену нормальной иерархии классов: вместо наследования с переопределением абстрактных методов пихают enum-поле и один большой спагетти-метод со switch. Это действительно можно считать "антипаттерном", так как от этого страдает читаемость кода и удобство работы с ним в IDE.
Связанный вопрос: When are enums NOT a code smell?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей