寻找在C#代码优化,让我都定义了一个枚举,并同时放创建枚举的类型的变量:在C#中,是否有办法在同一时间定义枚举和该枚举的实例?
前:
enum State {State1, State2, State3};
State state = State.State1;
后(不工作):
enum State {State1, State2, State3} state;
state = State.State1;
这样的事情是否存在?
寻找在C#代码优化,让我都定义了一个枚举,并同时放创建枚举的类型的变量:在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;
}
显然,这不是一个实际的枚举,你没有那个枚举类型为您提供的糖,但你仍然可以使用二元运算符,如OR,AND或其他实际枚举的条件。
我不知道为什么有时候我们会得到降低成本O_o – 2015-01-09 11:05:24
它不适用于'switch',因为它不是恒定的。也'var someFakeEnum = {State1 = 0,State2 = 1};'不起作用,那里应该有一个'新'。 – Haocheng 2015-03-29 13:39:18
@Haocheng固定。我删除了'switch'部分。那是错的。 – 2015-03-29 14:01:31
从C/C++切换,我想?
不,不能这样做
这不是一个优化。
不,没有这样的东西存在,并有充分的理由。它的可读性要低得多,并且绝对有这样做的好处。用两个单独的声明来声明它们并且完成它。
如果你从字面上得到报酬,以减少你的源代码行数,就这样写:
enum State {State1, State2, State 3}; State state = State.State1;
(是的,这是一个笑话居多。)
不,在C#中,声明或类型以及使用该类型声明变量是分开的。
在C/C++中,通常直接声明和使用类型,例如struct
关键字。在C#中它们是分开的。
注意,在C#中你不需要申报的enum
(或class
或struct
)后的分号:
enum State { State1, State2, State3 }
它仍然允许虽然,想必是用C多一点兼容/ C++语法。
即使有这样一种方式,它也不会再被优化。 'enum State {State1,State2,State3}'不会在运行时花费任何东西。 – 2011-05-30 14:59:48