Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取枚举中的下一项,如果最后返回+;1._C#_Enums - Fatal编程技术网

C# 获取枚举中的下一项,如果最后返回+;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

我看到了,想知道如果下一个项目是(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(); // 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();

    }