gpt4 book ai didi

c# - 如何在 C# 中获取下一个(或上一个)枚举值

转载 作者:IT王子 更新时间:2023-10-29 03:51:21 25 4
gpt4 key购买 nike

我有一个这样定义的枚举:

public enum eRat { A = 0, B=3, C=5, D=8 };

所以给定值 eRat.B,我想得到下一个值 eRat.C

我看到的解决方案是(没有范围检查)

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):

对于这么简单的事情来说,这太复杂了。你知道更好的解决方案吗?像 eRat.B+1Enum.Next(Erat.B) 这样的东西?

谢谢

最佳答案

感谢大家的回答和反馈。我很惊讶能得到这么多。查看它们并使用其中的一些想法,我想出了这个最适合我的解决方案:

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();

注意,我使用的是通用扩展方法,因此我不需要在调用时指定类型,只需.Next()即可。

关于c# - 如何在 C# 中获取下一个(或上一个)枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/642542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com