gpt4 book ai didi

c# - 我如何在这种情况下传递枚举

转载 作者:行者123 更新时间:2023-11-30 22:34:56 27 4
gpt4 key购买 nike

我想更改我编写的以下函数,以便它将 Enum(在本例中为 MyColors)作为参数,以便我可以在任何合适的连续 Enum 上使用该函数。到目前为止我尝试过的一切都失败了,所以我被困住了。

    private enum MyColors { Red, Green, Blue }

private String GetNext(String colorName)
{
MyColors colorValue;
String colorNameOut = String.Empty;

if (Enum.TryParse(colorName, out colorValue))
{
MyColors initial = colorValue, next = colorValue;

for (int i = ((Int32)initial) + 1; i < 10; i++)
{
if (Enum.IsDefined(typeof(MyColors), i))
{
next = (MyColors)i;
break;
}
else
{
next = (MyColors)0;
}
}
colorNameOut = next.ToString();
}
return colorNameOut;
}

最佳答案

以下应该有效:

private static String GetNext<T>(String colorName) where T : struct
{
// Verify that T is actually an enum type
if (!typeof(T).IsEnum)
throw new ArgumentException("Type argument must be an enum type");

T colorValue;
String colorNameOut = String.Empty;

if (Enum.TryParse<T>(colorName, out colorValue))
{
T initial = colorValue, next = colorValue;

for (int i = (Convert.ToInt32(initial)) + 1; i < 10; i++)
{
if (Enum.IsDefined(typeof(T), i))
{
next = (T)Enum.ToObject(typeof(T), i);
break;
}
else
{
next = (T)Enum.ToObject(typeof(T), 0);
}
}
colorNameOut = next.ToString();
}
return colorNameOut;
}

由于该方法现在是通用的,因此必须使用枚举类型的类型参数调用它,例如:

GetNext<MyColors>("Red")

关于c# - 我如何在这种情况下传递枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628022/

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