在 c# 中寻找代码优化,允许我同时定义一个枚举并创建该枚举类型的变量:
前:
enum State {State1, State2, State3};
State state = State.State1;
之后(不起作用):
enum State {State1, State2, State3} state;
state = State.State1;
有这样的东西存在吗?
在 c# 中寻找代码优化,允许我同时定义一个枚举并创建该枚举类型的变量:
前:
enum State {State1, State2, State3};
State state = State.State1;
之后(不起作用):
enum State {State1, State2, State3} state;
state = State.State1;
有这样的东西存在吗?
在 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 等二元运算符或任何其他实际枚举的条件。
这不是优化。
不,没有这样的东西存在,而且有充分的理由。它的可读性要低得多,这样做的好处绝对为零。在两个单独的语句中声明它们并完成它。
如果你确实是为了减少源代码中的行数而获得报酬,请这样写:
enum State {State1, State2, State 3}; State state = State.State1;
(是的,这是个玩笑。大多数情况下。)
我想从 C/C++ 切换?
不,不能那样做
不,那不存在。恕我直言,它也不是很可读
不,在 C# 中,声明或类型以及使用该类型声明变量是分开的。
在 C/C++ 中,通常直接声明和使用类型,例如使用struct
关键字。在 C# 中,它们是分开的。
enum
请注意,在 C# 中,声明 an (或 aclass
或 a )后不需要分号struct
:
enum State { State1, State2, State3 }
尽管如此,它仍然是允许的,大概是为了与 C/C++ 语法更兼容。