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

时间:2011-05-30 14:55:34

标签: c# syntax enums variable-declaration

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

在:

    enum State {State1, State2, State3};
    State state = State.State1;

之后(不起作用):

    enum State {State1, State2, State3} state;
    state = State.State1;

有这样的事吗?

5 个答案:

答案 0 :(得分:8)

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

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

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

更新

C#7引入了句法元组:

var someFakeEnum = (State1: 0, State2: 1);

或使用匿名类型:

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;
}

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

答案 1 :(得分:5)

这不是优化。

不,没有这样的事情存在,并且有充分的理由。它的可读性要低得多,并且这样做可以获得绝对的好处。用两个单独的陈述声明它们并用它完成。

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

enum State {State1, State2, State 3}; State state = State.State1;

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

答案 2 :(得分:2)

我想从C / C ++切换?

不,不能那样做

答案 3 :(得分:1)

不,那不存在。或者它是非常可读的恕我直言

答案 4 :(得分:0)

不,在C#中,声明或类型以及使用该类型声明变量是分开的。

在C / C ++中,通常直接声明和使用类型,例如使用struct关键字。在C#中它们是分开的。

请注意,在C#中,在声明enum(或classstruct)后,您不需要分号:

enum State { State1, State2, State3 }

虽然它仍然被允许,但可能与C / C ++语法更加兼容。