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

问题描述

| 在c#中寻找代码优化,以使我能够定义一个枚举并同时创建该枚举类型的变量: 之前:
    enum State {State1,State2,State3};
    State state = State.State1;
之后(无效):
    enum State {State1,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#中,它们是分开的。 请注意,在C#中,您在声明ѭ8or(或
class
或ѭ7after)之后不需要分号:
enum State { State1,State3 }
不过,仍然允许它,大概与C / C ++语法兼容。