定义“动态”枚举

时间:2010-10-09 22:50:47

标签: c# .net asp.net visual-studio-2008

我正在研究这个项目,我有大量的“服务”要执行。我需要有这些服务代码,以便我可以根据所选服务的代码进行验证并做出决定。

我要定义此枚举并从web.config获取其值,以便我可以轻松更改它们。

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

但是我得到了这个错误:表达式必须是常量。 (因为转换)

我该怎么办? (或者你可以建议我完全不同的方法。)

2 个答案:

答案 0 :(得分:2)

继续并定义一个这样的静态类:

public static class ServiceCodes
{
  readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
  //...
}

答案 1 :(得分:2)

documentation表示枚举值是常量。另一种方法是声明一个具有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);

但是,考虑到复杂性(与增益相比),我会采用第一种方法。