C# 定义;“动态”;枚举
我正在从事这个项目,我有大量的“服务”要执行。我需要有这个服务代码,这样我就可以验证和作出决定,根据它的代码选择的服务 我试图定义这个枚举,并从web.config获取其值,以便轻松更改它们C# 定义;“动态”;枚举,c#,.net,asp.net,visual-studio-2008,C#,.net,Asp.net,Visual Studio 2008,我正在从事这个项目,我有大量的“服务”要执行。我需要有这个服务代码,这样我就可以验证和作出决定,根据它的代码选择的服务 我试图定义这个枚举,并从web.config获取其值,以便轻松更改它们 public enum ServiceCodes { Transfer= Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]), ChangePlate= Convert.ToInt32(Configuration
public enum ServiceCodes
{
Transfer= Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]),
ChangePlate= Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"])
}
但是我得到了一个错误:表达式必须是常量。(因为转换)
我能做什么?(或者你可以向我推荐完全不同的方法。)继续定义一个静态类,如下所示:
public static class ServiceCodes
{
readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
//...
}
SomeAction(ServiceCodes.Transfer);
继续定义一个静态类,如下所示:
public static class ServiceCodes
{
readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
//...
}
SomeAction(ServiceCodes.Transfer);
枚举值为常量的状态。另一种方法是声明具有静态只读
成员的类
如果仍然需要枚举提供的类型安全性,可以使用稍微复杂的方法:
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) {
//....
}
可以这样称呼:
public static class ServiceCodes
{
readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
//...
}
SomeAction(ServiceCodes.Transfer);
但是,考虑到复杂性(与增益相比),我会选择第一种方法。枚举值是常量的状态。另一种方法是声明具有静态只读
成员的类
如果仍然需要枚举提供的类型安全性,可以使用稍微复杂的方法:
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) {
//....
}
可以这样称呼:
public static class ServiceCodes
{
readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])
//...
}
SomeAction(ServiceCodes.Transfer);
但是,考虑到复杂性(与收益相比),我会选择第一种方法