Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 定义;“动态”;枚举_C#_.net_Asp.net_Visual Studio 2008 - Fatal编程技术网

C# 定义;“动态”;枚举

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

我正在从事这个项目,我有大量的“服务”要执行。我需要有这个服务代码,这样我就可以验证和作出决定,根据它的代码选择的服务

我试图定义这个枚举,并从web.config获取其值,以便轻松更改它们

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);
但是,考虑到复杂性(与收益相比),我会选择第一种方法