在c#中的开关情况下分配枚举

本文关键字:情况下 分配 枚举 开关 | 更新日期: 2023-09-27 18:23:46

我需要在switch case语句中更改Enum,如下所示

var en; 
switch (RequestTypID.ToString())
            {
                case "15":
                    en = enum1;
                    break;
                case "16":
                    en = enum2;
                    break;
                case "14":
                    en = enum3;
                    break;
                case "13":
                    en = enum4;
                    break;
                default:
                    break;
            }

然后将其传递到像这样的foreach循环

foreach (var status in Enum.GetValues(typeof(en)))

我看到一个错误,说en必须初始化?我应该为en变量声明什么类型?我应该为状态变量声明什么类型?

好吧,我把这一行添加到代码中,一个问题就解决了;

var en = typeof(enum1);

但现在它说在我的每个循环中都找不到en参考?

我还把我的开关盒换成了类似的东西

switch (RequestTypID.ToString())
            {
                case "15":
                    en = typeof(enum1);
                    break; 
                    ....

在c#中的开关情况下分配枚举

Enum.GetValues需要一个Type作为参数。所以简单地将您的en声明为Type

Type en = null;

您不能在不初始化它的情况下将其声明为var:编译器需要知道您想要使用的真实类型是什么。

此外,您必须更改您的交换机:

en = typeof(SomeEnum);

不能用var创建变量(var不是类型)而不给它赋值。Var意味着编译器会根据它的值来评估它的type,但这里没有变量的值。因此,您需要为变量en分配一个值。分配一个类型为enum1、enum2、enum3、enum4的值。。

我看到一个错误,说en必须初始化?

这是合理的,因为这个var en;是不正确的。当我们想隐式声明某个东西时,我们必须在声明它时为它赋值,以便编译器推断它的类型。

例如var n = 4;。CCD_ 12可以被存储到类型为CCD_。因此,编译器,当看到这个声明时,理解n的tyoe int.

您必须在var语句的右侧有另一个变量,这样编译就知道会发生什么。

您应该执行以下操作:

var en = YourEnum.Option1;

YourEnum en;