尝试解析枚举

发布于 2024-08-03 03:42:16 字数 686 浏览 7 评论 0原文

我正在解析文本文件中的一些枚举值。为了简化操作,我使用如下函数:

(此处的示例代码使用 C++/CLI,但也欢迎用 C# 提供答案。)

bool TryParseFontStyle(String ^string, FontStyle% style){
    try {
        FontStyle ^refStyle = dynamic_cast<FontStyle^>(
            Enum::Parse(FontStyle::typeid, string));
        if(refStyle == nullptr)
            return false;
            style = *refStyle;
        return true;
    }
    catch(Exception ^e){
        return false;
    }
}

现在,我需要为每个枚举类型重写类似的函数我正在解析。如何使用泛型编写一个函数来处理任何枚举类型?

更新:在这里发现了类似的问题:How to TryParse for Enum值?

I am parsing some enum values from a text file. In order to simplify things I am using functions like the following:

(The sample code here uses C++/CLI but answers in C# are also welcome.)

bool TryParseFontStyle(String ^string, FontStyle% style){
    try {
        FontStyle ^refStyle = dynamic_cast<FontStyle^>(
            Enum::Parse(FontStyle::typeid, string));
        if(refStyle == nullptr)
            return false;
            style = *refStyle;
        return true;
    }
    catch(Exception ^e){
        return false;
    }
}

Now I need to rewrite similar functions for each enum type that I am parsing. How do I use generics to write one single function to handle any enum type?

Update: Found a similar question here: How to TryParse for Enum value?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

笑咖 2024-08-10 03:42:16
public static bool TryParseEnum<T> (string value, out T result) where T : struct
{
    if (value == null)
    {
        result = default (T) ;
        return false ;
    }

    try
    {
        result = (T) Enum.Parse (typeof (T), value) ;
        return true  ;
    }
    catch (ArgumentException)
    {
        result = default (T) ;
        return false ;
    }
}
public static bool TryParseEnum<T> (string value, out T result) where T : struct
{
    if (value == null)
    {
        result = default (T) ;
        return false ;
    }

    try
    {
        result = (T) Enum.Parse (typeof (T), value) ;
        return true  ;
    }
    catch (ArgumentException)
    {
        result = default (T) ;
        return false ;
    }
}
贱人配狗天长地久 2024-08-10 03:42:16

这个方法看起来可行,并且没有使用try/catch。

public static bool EnumTryParse<T>(string strType,out T result)
{
    string strTypeFixed = strType.Replace(' ', '_');
    if (Enum.IsDefined(typeof(T), strTypeFixed))
    {
        result = (T)Enum.Parse(typeof(T), strTypeFixed, true);
        return true;
    }
    else
    {
        foreach (string value in Enum.GetNames(typeof(T)))
        {
            if (value.Equals(strTypeFixed, StringComparison.OrdinalIgnoreCase))
            {
                result = (T)Enum.Parse(typeof(T), value);
                return true;
            }
        }
        result = default(T);
        return false;
    }
}

来源

This method seems to work and does not use try/catch.

public static bool EnumTryParse<T>(string strType,out T result)
{
    string strTypeFixed = strType.Replace(' ', '_');
    if (Enum.IsDefined(typeof(T), strTypeFixed))
    {
        result = (T)Enum.Parse(typeof(T), strTypeFixed, true);
        return true;
    }
    else
    {
        foreach (string value in Enum.GetNames(typeof(T)))
        {
            if (value.Equals(strTypeFixed, StringComparison.OrdinalIgnoreCase))
            {
                result = (T)Enum.Parse(typeof(T), value);
                return true;
            }
        }
        result = default(T);
        return false;
    }
}

Source

早茶月光 2024-08-10 03:42:16

在 C# 中:

Enum.Parse(typeof(yourEnum),"yourValue");

只需用 try catch 包围它,然后就可以开始了

In c#:

Enum.Parse(typeof(yourEnum),"yourValue");

Just surround that with a try catch and your set to go

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