在C#中,有没有办法同时定义枚举和枚举的实例?

Dav*_*ave 7 c# syntax enums variable-declaration

在c#中寻找代码优化,允许我同时定义枚举并同时创建该枚举类型的变量:

之前:

    enum State {State1, State2, State3};
    State state = State.State1;
Run Code Online (Sandbox Code Playgroud)

之后(不起作用):

    enum State {State1, State2, State3} state;
    state = State.State1;
Run Code Online (Sandbox Code Playgroud)

这样的事情存在吗?

Mat*_*zer 8

在C#中没有对它的支持,但是如果你只需要切换一些状态并且你不需要对它进行任何特殊操作,那么你可以通过使用元组或匿名类型来解决这个问题并做一些"接近"枚举的事情. .

例如,使用元组,您可以这样做:

var someFakeEnum = Tuple.Create(0, 1);

更新:

C#7引入了语法元组:

var someFakeEnum = (State1: 0, State2: 1);
Run Code Online (Sandbox Code Playgroud)

或者使用匿名类型:

var someFakeEnum = new { State1 = 0, State2 = 1 };

之后,您可以执行以下操作:

int state = 0;

// If you're using tuples...
if(some condition)
{
    state = someFakeEnum.Item2;
}

// ...or if you're using anonymous types or C# >= 7 tuples...
if(some condition) 
{
    state = someFakeEnum.State2;
}
Run Code Online (Sandbox Code Playgroud)

显然这不是一个实际的枚举,你没有Enum类型为你提供的糖,但你仍然可以使用像OR,AND或条件一样的二元运算符,就像任何其他实际的枚举一样.


Cod*_*ray 5

这不是优化.

不,没有这样的存在,并且有充分的理由.它的可读性要低得多,这样做绝对没有任何好处.在两个单独的语句中声明它们并完成它.

如果您真的得到报酬来减少源代码中的行数,请按以下方式编写:

enum State {State1, State2, State 3}; State state = State.State1;
Run Code Online (Sandbox Code Playgroud)

(是的,这是一个笑话.主要是.)

  • 我想知道,在我对初学者程序员的建议中,我讽刺地间接产生了多少可怕的代码. (2认同)
  • 当枚举的使用非常有限时,内联枚举实际上很有用,例如用于定义方法参数,它只接受很少的状态,并且在您的命名空间中拥有专用的枚举类型实际上没有用。这可以在 C# 6.0 中更好地实现,它简化了静态成员的使用。 (2认同)