我正在研究这个项目,我有大量的“服务”要执行。我需要有这些服务代码,以便我可以根据所选服务的代码进行验证并做出决定。
我要定义此枚举并从web.config获取其值,以便我可以轻松更改它们。
public enum ServiceCodes
{
Transfer= Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]),
ChangePlate= Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"])
}
但是我得到了这个错误:表达式必须是常量。 (因为转换)
我该怎么办? (或者你可以建议我完全不同的方法。)
答案 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);
但是,考虑到复杂性(与增益相比),我会采用第一种方法。