我是一个有用的助手,可以帮您进行翻译。
需要优化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或条件语句。
switch
不起作用,因为它不是常量。另外var someFakeEnum = { State1 = 0, State2 = 1 };
也不起作用,需要加上一个new
。 - Haochengswitch
部分,那是错误的。 - Matías Fidemraizer这不是一种优化。
不,这样的东西不存在,有很好的理由。这样会使代码可读性降低很多,并且绝对没有任何好处。将它们分别声明为两个语句并完成它。
如果你真的被要求缩减源代码中的行数,可以像这样编写:
enum State {State1, State2, State 3}; State state = State.State1;
(是的,这只是个玩笑。大部分是这样的。)
你是从C/C++转过来的吗?
不,不能这样做。
不存在这样的东西。在我看来,它也不是很易读。
enum State { State1, State2, State3 }
虽然这仍然被允许,但大概是为了更兼容 C/C++ 语法。
enum State {State1, State2, State3}
在运行时不会产生任何成本。 - Gavi Lock