【问题标题】:How can I cast a String to an Enum [duplicate]如何将字符串转换为枚举 [重复]
【发布时间】:2017-05-01 21:12:26
【问题描述】:

我有以下代码:

public string GetSetting(string setting)
{
   return db2.ExecuteScalar<string>("SELECT VALUE FROM Setting WHERE  SettingType = ?", setting);
}

public enum NOA
{
    All = 0,
    Five = 5,
    Seven = 7,
    Nine = 9,
    Ten = 10
}
public static partial class Extensions
{
    public static string Text(this NOA noa)
    {
        switch (noa)
        {
            case NOA.Ten: return "10";
            case NOA.Five: return "5";
            case NOA.Seven: return "7";
            case NOA.Nine: return "9";
        }
        return "";
    }
}

我想做的是获取 noa 的值并将其转换为 NOA。

这是我尝试过的。但我收到一条错误消息,提示“字符串不包含值的定义”:

NOA noa = (NOA)App.DB.GetSetting("NumberOfAnswers").Value;

当我尝试这个时。我收到一条错误消息“无法将类型字符串转换为 Japanese.NOA:

NOA noa = (NOA)App.DB.GetSetting("NumberOfAnswers");

有人可以告诉我如何获取价值并将其放入 noa 中吗?

【问题讨论】:

    标签: c# .net string enums


    【解决方案1】:

    似乎您正在从指定的方法获取输出作为字符串。并且您希望将其转换为枚举,这里更好的选择是 TryParse,可以像下面这样使用:

    NOA noa;
    bool conversionResult = Enum.TryParse(App.DB.GetSetting("NumberOfAnswers"), out noa);
    

    执行此行会在conversionResult中得到一个布尔值,如果为true则表示转换成功,如果为false则表示转换失败,这次你将得到NOA中的默认值noa,让App.DB.GetSetting("NumberOfAnswers")的返回值为"10",那么noa的值为TenconversionResult的值为true

    【讨论】:

    • 不走运 - 我完全控制了设置中的内容,所以您是否也可以提供不包括检查的建议。谢谢。
    【解决方案2】:

    先将值解析为您的枚举类型,然后将其转换为整数

    var result = result.Text(Enum.Parse(typeof(NOA),App.DB.GetSetting("NumberOfAnswers")));
    

    【讨论】:

    • 抱歉,我可能不太清楚。我想要的是在右侧调用 GetSettings 并将值作为 noa 类型输入 noa。谢谢
    • @Alan :更新了答案。
    猜你喜欢
    • 2012-12-07
    • 2019-02-21
    • 2021-07-21
    • 1970-01-01
    • 2016-07-30
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多