【发布时间】:2011-06-14 12:11:15
【问题描述】:
【问题讨论】:
【问题讨论】:
我通常对这些东西使用通用 Enum 类:
public static class Enum<T>
{
public static T Parse(string value)
{
return (T)Enum.Parse(typeof(T), value);
}
public static List<T> GetValues()
{
List<T> values = new List<T>();
foreach (T value in Enum.GetValues(typeof(T)))
values.Add(value);
return values;
}
public static string GetName(object value)
{
return Enum.GetName(typeof(T), value);
}
// etc
// you also can add here TryParse
}
使用更简单:
Enum<DayOfWeek>.Parse("Friday");
【讨论】:
虽然所有 Enum.Parse 人都是正确的,但现在有 Enum.TryParse!
这极大地改善了事情。
【讨论】:
.net 在 System.Enum 类型上提供了一些静态方法来执行此操作,除了实际执行强制转换的代码之外,还有几件事需要考虑:
所以如果你有一个枚举:
public enum TestEnum
{
FirstValue,
SecondValue
}
那么System.Enum类提供了以下2个静态方法,将字符串值强制转换为枚举类型:
Enum.IsDefined (.net 1.1 - 4 + silverlight)(用法)
TestEnum testEnum;
if( Enum.IsDefined(typeof(TestEnum), "FirstValue") )
{
testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "FirstValue");
}
Enum.TryParse (.net 4 + silverlight)(用法)
TestEnum testEnum;
bool success = Enum.TryParse("FirstValue", out testEnum);
或者,如果您不需要执行任何安全检查,则提供 Enum.Parse 方法(正如其他人所提到的)。但是,如果您尝试在我们的示例中执行类似的操作,
Enum.Parse(TestEnum, "ThisValueDoesNotExist")
然后 .net 将抛出 System.ArgumentException ,您必须处理它。
因此,简而言之,尽管执行您所要求的语法很简单,但我建议您考虑一些预防措施以确保代码无错误,尤其是在您解析从用户输入获得的字符串时。如果字符串来自设置文件或其他类型的值,您可以确定它是在您的枚举类型中定义的,那么可以跳过我在回答中概述的一些额外步骤。
我希望这会有所帮助!
【讨论】:
你可以这样做:
MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");
【讨论】:
或者用这样的方法包装它:
T ParseEnum<T>(string stringValue)
{
return (T) Enum.Parse(typeof(T), stringValue);
}
【讨论】:
使用Enum.Parse:
(EnumType)Enum.Parse(typeof(EnumType), "EnumString");
【讨论】: