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)
这样的事情存在吗?
在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或条件一样的二元运算符,就像任何其他实际的枚举一样.
这不是优化.
不,没有这样的存在,并且有充分的理由.它的可读性要低得多,这样做绝对没有任何好处.在两个单独的语句中声明它们并完成它.
如果您真的得到报酬来减少源代码中的行数,请按以下方式编写:
enum State {State1, State2, State 3}; State state = State.State1;
Run Code Online (Sandbox Code Playgroud)
(是的,这是一个笑话.主要是.)