在 C# 中将字符串转换为枚举标记

发布于 2024-10-13 13:06:43 字数 221 浏览 2 评论 0原文

可能的重复:
如何将字符串转换为枚举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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

携余温的黄昏 2024-10-20 13:06:43

你可以这样做:

MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");

You can do this:

MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");
海风掠过北极光 2024-10-20 13:06:43

虽然所有 Enum.Parse 人员都是正确的,但现在有了 Enum.TryParse

这大大改善了事情。

While all the Enum.Parse people are correct, there's now Enum.TryParse!

Which improves things greatly.

活泼老夫 2024-10-20 13:06:43

我通常使用通用 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");

I usually use generic Enum class for this stuff:

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
}

Usage is more simple:

Enum<DayOfWeek>.Parse("Friday");
才能让你更想念 2024-10-20 13:06:43

使用 Enum.Parse

(EnumType)Enum.Parse(typeof(EnumType), "EnumString");

Use Enum.Parse:

(EnumType)Enum.Parse(typeof(EnumType), "EnumString");
水染的天色ゝ 2024-10-20 13:06:43

或者将其包装在这样的方法中:

T ParseEnum<T>(string stringValue)
{
    return (T) Enum.Parse(typeof(T), stringValue);  
}

Or wrap it in a method like this:

T ParseEnum<T>(string stringValue)
{
    return (T) Enum.Parse(typeof(T), stringValue);  
}
岁月如刀 2024-10-20 13:06:43

.net 在 System.Enum 类型上提供了一些静态方法来执行此操作,除了实际执行转换的代码之外,还有几件事需要考虑:

  1. 您必须知道包含要转换为的值的枚举类型。
  2. 谨慎的做法是考虑以下事实:您尝试转换的字符串值可能未在您的目标枚举类型上定义。

因此,如果您有一个枚举:

    public enum TestEnum
    {
        FirstValue,
        SecondValue
    }

那么 System.Enum 类提供了以下 2 个静态方法,用于将字符串值转换为枚举类型:

Enum.IsDefined (.net 1.1 - 4 + silverlight) (usage)

    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。

简而言之,虽然执行您要求的操作的语法很简单,但我建议考虑一些预防措施,以确保代码无错误,特别是在解析从用户输入获取的字符串时。如果字符串来自设置文件或某种其他类型的值,您可以确定是在枚举类型中定义的,那么可以跳过我在答案中概述的一些额外步骤。

我希望这有帮助!

.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:

  1. You have to know the enum type which contains the value you will cast TO.
  2. It would be prudent to consider the fact that the string value you are attempting to cast might not be defined on your target enum type.

So if you have an enum:

    public enum TestEnum
    {
        FirstValue,
        SecondValue
    }

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)

    TestEnum testEnum;
    if( Enum.IsDefined(typeof(TestEnum), "FirstValue") )
    {
        testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "FirstValue");
    }

Enum.TryParse ( .net 4 + silverlight) (usage)

    TestEnum testEnum;
    bool success = Enum.TryParse("FirstValue", out testEnum);

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,

    Enum.Parse(TestEnum, "ThisValueDoesNotExist")

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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文