可能是重复问题:
如何在C#中将字符串转换为枚举类型?
如何在C#中将字符串(文本)转换为枚举标签值
可能是重复问题:
如何在C#中将字符串转换为枚举类型?
如何在C#中将字符串(文本)转换为枚举标签值
MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");
我通常使用通用的枚举类来处理这个问题:
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");
或者像这样将其包装在一个方法中:
T ParseEnum<T>(string stringValue)
{
return (T) Enum.Parse(typeof(T), stringValue);
}
.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 异常,您需要处理它。
简而言之,虽然执行您要求的语法很简单,但我建议考虑一些预防措施,以确保无误的代码,特别是如果您正在解析从用户输入获取的字符串。如果该字符串来自设置文件或其他某种值,您可以确定它在枚举类型中定义,则可以跳过我在答案中概述的一些额外步骤。
希望这有所帮助!