Чем плох enum в C#?
Возьмите пиво и допросите своих коллег - пусть альтернативу предлагают. Ничем enum не плох - удобная вещь.
Обычно, когда говорят, что enum плох, то имеют в виду что он не несёт в себе дополнительного поведения. Т.е. его нельзя расширить, добавить новую семантику, самопроверку и прочее. Так, для тех же единиц измерения помимо самого имени в enum (Units.Watt) нужно ещё иметь обычно выводимое имя (Ватт), способ конвертирования и ещё чего-нибудь. Поэтому в этом случае общая рекомендация состоит в создании иерархии классов, наследуемых от общего абстрактного класса.
Например:public abstract class Unit
{
   int _enumValue;
   public string Name {get;private set; }

   implicit operator int(Unit value) {return this._enumValue; } // обычно нужно для сохранения во внешнем хранилище или передаче по сети - по сути аналог обычного enum
   // ... и т.д.
}

public class Watt : Unit {
     Watt() { Name = "Ватт"; }
}
К этому ещё надо подключать фабрику для их восстановления из int и что-то ещё насколько я помню. Где я про это читал сейчас не могу вспомнить - но смысл такой.