如何解决在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 ++语法兼容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。