Определить «динамический» enum - PullRequest
1 голос
/ 10 октября 2010

Я работаю над этим проектом, и у меня есть большое количество «сервисов» для выполнения. Мне нужны эти сервисные коды, чтобы я мог проверять и принимать решения в соответствии с выбранными сервисами по его коду.

Я пытаюсь определить это enum и получить его значения из web.config, чтобы я мог легко их изменить.

public enum ServiceCodes
{
    Transfer= Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]),
    ChangePlate= Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"])
}

Но я получаю эту ошибку: выражение должно быть постоянным. (из-за конверсии)

Что я могу сделать? (Или вы можете предложить мне совершенно другие подходы.)

Ответы [ 2 ]

2 голосов
/ 10 октября 2010

В документации указано, что значения перечисления являются постоянными.Альтернативный подход заключается в объявлении класса с static readonly членами.

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

public class ServiceCodes {

    public static readonly ServiceCodes Transfer = new ServiceCodes(Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]));
    public static readonly ServiceCodes ChangePlate = new ServiceCodes(Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"]));

    internal int Code {get; private set;}

    private ServiceCodes(int code) {
        Code = code;
    }
}

Тогдатакой метод, как:

public void SomeAction(ServiceCodes serviceCode) {
    //....  
}

можно было бы назвать так:

SomeAction(ServiceCodes.Transfer);

Но, учитывая сложность (по сравнению с усилением), я бы пошел с первым подходом.

2 голосов
/ 10 октября 2010

Просто определите статический класс следующим образом:

public static class ServiceCodes
{
  readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
  //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...