8

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

前:

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

之后(不起作用):

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

有这样的东西存在吗?

4

5 回答 5

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 等二元运算符或任何其他实际枚举的条件。

于 2011-05-30T15:07:45.037 回答
5

这不是优化。

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

如果你确实是为了减少源代码中的行数而获得报酬,请这样写:

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

(是的,这是个玩笑。大多数情况下。)

于 2011-05-30T14:59:14.617 回答
2

我想从 C/C++ 切换?

不,不能那样做

于 2011-05-30T14:57:36.770 回答
1

不,那不存在。恕我直言,它也不是很可读

于 2011-05-30T14:57:05.803 回答
0

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

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

enum请注意,在 C# 中,声明 an (或 aclass或 a )后不需要分号struct

enum State { State1, State2, State3 }

尽管如此,它仍然是允许的,大概是为了与 C/C++ 语法更兼容。

于 2011-05-30T15:06:48.517 回答