作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想更改我编写的以下函数,以便它将 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/
我是一名优秀的程序员,十分优秀!