如何在C#中获取下一个(或上一个)枚举值(How to get next (or previous) enum value in C#)
我们经常会流程相关的枚举代码,或者枚举值有端点的代码可以想到的一种方法
public enum eRat { A = 0, B=3, C=5, D=8 };
Array a = Enum.GetValues(typeof(eRat));
int i=0 ;
for (i = 0; i < a.GetLength(); i++)
{
if (a.GetValue(i) == eRat.B)
break;
}
return (eRat)a.GetValue(i+1):
这样做虽然可以的但是有点复杂,我们可以直接扩展enum
public static class Extensions
{
public static T Next<T>(this T src) where T : struct
{
if (!typeof(T).IsEnum) throw new ArgumentException(String.Format("Argument {0} is not an Enum", typeof(T).FullName));
T[] Arr = (T[])Enum.GetValues(src.GetType());
int j = Array.IndexOf<T>(Arr, src) + 1;
return (Arr.Length==j) ? Arr[0] : Arr[j];
}
}
这样我们直接一句就可以解决问题了,可以用在任何枚举上
return eRat.B.Next();