如何将字符串(文本)转换(转换为)为C#
中的枚举标记值答案 0 :(得分:7)
你可以这样做:
MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");
答案 1 :(得分:5)
虽然所有Enum.Parse人都是正确的,但现在有Enum.TryParse!
这极大地改善了事情。
答案 2 :(得分:3)
我通常使用通用的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");
答案 3 :(得分:2)
使用Enum.Parse
:
(EnumType)Enum.Parse(typeof(EnumType), "EnumString");
答案 4 :(得分:1)
或者用这样的方法包装它:
T ParseEnum<T>(string stringValue)
{
return (T) Enum.Parse(typeof(T), stringValue);
}
答案 5 :(得分:1)
.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。
简而言之,虽然您要求的语法很简单,但我建议您考虑采取一些预防措施,以确保无错误的代码,尤其是在解析从用户输入获得的字符串时。如果字符串来自设置文件或其他类型的值,您可以确定在枚举类型中定义,那么可以跳过我在答案中概述的一些额外步骤。
我希望这有帮助!