C# 获取枚举中的下一项,如果最后返回+;1.
我看到了,想知道如果下一个项目是(last+1),是否也可以返回第一个项目。想象一下:C# 获取枚举中的下一项,如果最后返回+;1.,c#,enums,C#,Enums,我看到了,想知道如果下一个项目是(last+1),是否也可以返回第一个项目。想象一下: public enum MODE { OFF, CHANNEL, TALKING } MODE Mode = MODE.OFF; Mode = Mode.Next(); // should give me MODE.CHANNEL Mode = Mode.Next(); // should give me MODE.TALKING Mode = Mode.Next(); // sh
public enum MODE {
OFF,
CHANNEL,
TALKING
}
MODE Mode = MODE.OFF;
Mode = Mode.Next(); // should give me MODE.CHANNEL
Mode = Mode.Next(); // should give me MODE.TALKING
Mode = Mode.Next(); // should give me MODE.OFF
在husayt的答案中加入模运算
代码:
公共静态类扩展{
公共静态T Next(此T src),其中T:struct{
if(!typeof(T).IsEnum)
抛出新ArgumentException(String.Format(“参数{0}不是枚举”),
类型(T.全名));
T[]Arr=(T[])Enum.GetValues(src.GetType());
int j=(Array.IndexOf(Arr,src)+1)%Arr.Length;//这可能有用:
static void Main(string[] args)
{
MODE Mode = MODE.TALKING; //Whatever value;
int index = (int)Mode;
index = ++index % 3;
Mode = (MODE)index;
Console.WriteLine("Mode value {0} ; index {1}", Mode, index );
Console.ReadKey();
}
这是循环,可以通过添加和枚举定义.Hmm来完成正常迭代。它似乎不起作用:“Blu”:!acc切换“Dvni”:AutoChannel Commander现在是频道“Blu”:!acc切换“Dvni”:AutoChannel Commander现在说的是“Blu”:!acctoggle@Bluscream:抱歉?Nvm,我错过了你的编辑。现在它工作得很好。非常感谢!回答得很好,但我反对将此作为扩展方法,因为你不能让编译器强制执行它只应用于枚举的规则。所以你可以做类似1.Next()
编译很好,但在运行时失败。@Matt Burland:7.3的另一个改进是其中T:Delegate
实现一个新方法只是一个想法。
static void Main(string[] args)
{
MODE Mode = MODE.TALKING; //Whatever value;
int index = (int)Mode;
index = ++index % 3;
Mode = (MODE)index;
Console.WriteLine("Mode value {0} ; index {1}", Mode, index );
Console.ReadKey();
}