在 C# 中将字符串转换为枚举标记
可能的重复:
如何将字符串转换为枚举C#?
如何将字符串(文本)转换(转换)为 C# 中的 Enum 标记值
Possible Duplicate:
How do I Convert a string to an enum in C#?
How to Convert (to Cast) a string ( a text) to be Enum tag value in C#
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你可以这样做:
You can do this:
虽然所有 Enum.Parse 人员都是正确的,但现在有了 Enum.TryParse!
这大大改善了事情。
While all the Enum.Parse people are correct, there's now Enum.TryParse!
Which improves things greatly.
我通常使用通用 Enum 类来处理这些东西:
用法更简单:
I usually use generic Enum class for this stuff:
Usage is more simple:
使用
Enum.Parse
:Use
Enum.Parse
:或者将其包装在这样的方法中:
Or wrap it in a method like this:
.net 在 System.Enum 类型上提供了一些静态方法来执行此操作,除了实际执行转换的代码之外,还有几件事需要考虑:
因此,如果您有一个枚举:
那么 System.Enum 类提供了以下 2 个静态方法,用于将字符串值转换为枚举类型:
Enum.IsDefined (.net 1.1 - 4 + silverlight) (usage)
Enum.TryParse ( .net 4 + silverlight)(用法)
或者,如果您不需要执行任何安全检查,则可以提供 Enum.Parse 方法(如其他人提到的)。但是,如果您尝试在我们的示例中执行类似的操作,
那么 .net 将抛出您必须处理的 System.ArgumentException。
简而言之,虽然执行您要求的操作的语法很简单,但我建议考虑一些预防措施,以确保代码无错误,特别是在解析从用户输入获取的字符串时。如果字符串来自设置文件或某种其他类型的值,您可以确定是在枚举类型中定义的,那么可以跳过我在答案中概述的一些额外步骤。
我希望这有帮助!
.net provides some static methods on the System.Enum type to do this, and aside from the code that actually does the cast, there are several things to consider:
So if you have an enum:
Then the following 2 static methods are provided by the System.Enum class to cast a string value to an enum type:
Enum.IsDefined (.net 1.1 - 4 + silverlight) (usage)
Enum.TryParse ( .net 4 + silverlight) (usage)
Alternatively, the Enum.Parse method (as mentioned by others) is provided if you do not need to perform any safety-checking. However, if you attempt to do something like this in our example,
then .net will throw a System.ArgumentException which you have to handle.
So in short, while the syntax to do what you ask is simple, there are a few precautions I would recommend considering to ensure error-free code, especially if you are parsing strings obtained from user input. If the string is from a settings file or some other sort of value you can be sure is defined in your enum type, then it may be ok to skip some of the extra steps I have outlined in my answer.
I hope this helps!