Cast a String to an Enum Tag in C#
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How do I Convert a string to an enum in C#?
如何将字符串(文本)转换为C中的枚举标记值#
您可以这样做:
1 |
虽然所有的enum.parse人员都是正确的,但现在有了enum.triparse!
这大大改善了事情。
我通常使用泛型枚举类来处理这些内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 } |
使用更简单:
1 | Enum<DayOfWeek>.Parse("Friday"); |
使用
1 |
.NET在System.Enum类型上提供了一些静态方法来执行此操作,除了实际执行转换的代码外,还需要考虑以下几点:
因此,如果您有一个枚举:
1 2 3 4 5 | public enum TestEnum { FirstValue, SecondValue } |
然后,System.Enum类提供以下2个静态方法来将字符串值强制转换为枚举类型:
Enum.IsDefined(.NET 1.1-4+Silverlight)(用法)
1 2 3 4 5 |
enum.typarse(.net 4+silverlight)(用法)
1 2 | TestEnum testEnum; bool success = Enum.TryParse("FirstValue", out testEnum); |
或者,如果不需要执行任何安全检查,则提供enum.parse方法(如其他人所述)。但是,如果您在我们的示例中尝试这样做,
1 | Enum.Parse(TestEnum,"ThisValueDoesNotExist") |
然后.NET将抛出一个必须处理的System.ArgumentException。
因此,简而言之,虽然执行您要求的操作的语法很简单,但我建议您考虑一些预防措施,以确保代码无错误,尤其是在分析从用户输入获得的字符串时。如果字符串来自设置文件或某种其他类型的值,您可以确定是在枚举类型中定义的,那么可以跳过我在回答中概述的一些额外步骤。
希望这有帮助!
或者用这样的方法包装它:
1 2 3 4 |