在c#中寻找代码优化,允许我同时定义枚举并同时创建该枚举类型的变量:
在:
enum State {State1, State2, State3};
State state = State.State1;
之后(不起作用):
enum State {State1, State2, State3} state;
state = State.State1;
有这样的事吗?
答案 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
(或class
或struct
)后,您不需要分号:
enum State { State1, State2, State3 }
虽然它仍然被允许,但可能与C / C ++语法更加兼容。