如何将字符串转换为枚举类型

4

I have the following code:

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。
这是我尝试过的方法,但我会收到一个错误,说“字符串不包含Value的定义”:
NOA noa = (NOA)App.DB.GetSetting("NumberOfAnswers").Value;

当我尝试这样做时,出现错误提示:“无法将字符串类型转换为Japanese.NOA:”。
NOA noa = (NOA)App.DB.GetSetting("NumberOfAnswers");

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

2个回答

5

看起来您正在从指定方法获取字符串输出,并希望将其转换为枚举类型。在这种情况下,更好的选择是使用TryParse方法,用法如下:

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

通过执行这行代码,您将在conversionResult中得到一个布尔值,如果它为真则表示转换成功完成,如果为假则表示转换失败,这时您将在noa中获得NOA的默认值。让App.DB.GetSetting("NumberOfAnswers")的返回值为"10",那么noa的值将是conversionResult将是true

不幸的是 - 我完全控制了设置中的内容,所以你能否提供一个不需要检查的建议。谢谢。 - Alan2

3
将值先解析为您的枚举类型,然后将其转换为整数。
var result = result.Text(Enum.Parse(typeof(NOA),App.DB.GetSetting("NumberOfAnswers")));

抱歉,也许我没有表达清楚。我的意思是希望在右侧调用GetSettings并将值作为noa类型传递给noa。谢谢。 - Alan2
@Alan:已更新答案。 - Sateesh Pagolu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接