При использовании Enums следует соблюдать осторожность, чтобы не использовать какие-либо операции, требующие отражения (или использовать их с осторожностью). Например:
- myEnumValue.ToString ().
- Enum.Parse ()
- Enum.IsDefined ()
- Enum.GetName ()
- Enum.GetNames ()
В случае констант возможность выполнения любых операций, требующих отражения, не существует. Однако, в случае перечислений это так. Поэтому вам нужно быть осторожным с этим.
Я видел профильные отчеты, где операции, связанные с проверками / отражениями перечислений, занимали до 5% процессорного времени (сценарий, когда проверки перечислений выполнялись при каждом вызове метода API). Этого можно значительно уменьшить, написав класс, который кэширует результаты отражения используемых типов перечислений.
Сказав это, Я бы порекомендовал принять решение об использовании enum против константы на основе того, что имеет смысл с точки зрения дизайна . Это делается для того, чтобы команда знала о последствиях для операций, связанных с отражением.