【问题标题】:Get value of enum member by its name?通过名称获取枚举成员的值?
【发布时间】:2014-02-04 19:32:23
【问题描述】:

假设我有一个变量,其值(例如,"listMovie")是enum 成员的名称:

public enum Movies
{
    regMovie = 1,
    listMovie = 2 // member whose value I want
}

在这个例子中,我想得到值2。这可能吗?这是我尝试过的:

public static void getMoviedata(string KeyVal)
{
    if (Enum.IsDefined(typeof(TestAppAreana.MovieList.Movies), KeyVal))
    {
        //Can print the name but not value
        ((TestAppAreana.MovieList.Movies)2).ToString(); //list
        Enum.GetName(typeof(TestAppAreana.MovieList.Movies), 2);
    }
}

【问题讨论】:

标签: c# .net enums


【解决方案1】:

假设KeyVal 是一个表示某个枚举名称的字符串,您可以通过以下方式执行此操作:

int value = (int)Enum.Parse(typeof(TestAppAreana.MovieList.Movies), KeyVal);

【讨论】:

  • 但该值在一个变量中,我不能像这样 TestAppAreana.MovieList.Movies.KeyVal
  • 它仍然打印 listMovie 而不是值
  • @NavajyothCS 听起来您并没有按照此处的说明进行操作。它应该像他写的那样工作。
  • @NavajyothCS:您必须包含int的演员表:((int)Enum.Parse(typeof(TestAppAreana.MovieList.Movies), KeyVal)).ToString();也许可以先尝试将其存储到本地int变量以便于阅读/管理。
  • 请注意,Enum.Parse() 上有一个有用的重载,它采用第三个参数 bool ignoreCase = false
【解决方案2】:

您想从字符串名称中获取 Enum 值。所以你可以使用Enum.Parse 方法。

int number = (int)Enum.Parse(typeof(TestAppAreana.MovieList.Movies), KeyVal)

你也可以试试Enum.TryParse看看解析是否成功。

Movies movie;
if (Enum.TryParse(KeyVal, true, out movie))
{

}

【讨论】:

  • 它仍然打印 listMovie 而不是值
  • @NavajyothCS 你确定你在我的代码中打印number 变量,它是int 类型并且不能将listMovie 作为值。
  • Int 值不支持所以我尝试了这个字符串 str= Enum.Parse(typeof(TestAppAreana.MovieList.Movies), KeyVal).ToString();
  • @NavajyothCS 不,它不起作用,您必须将其转换为 int 以获取数字,然后您可以将 int 转换为 string .
【解决方案3】:

用途:

var val= (int)Enum.Parse(typeof(TestAppAreana.MovieList.Movies), KeyVal)

【讨论】:

    【解决方案4】:

    不确定过去,因为我是 C# 的新手,但截至今天,这有效并给出了 2 的值:

    (int)Movies.listMovie

    【讨论】:

    • 这并不能真正回答问题。问题是询问如何通过枚举名称将 字符串值 转换为 枚举值的整数值,例如"listMovie" => Movies.listMovie => 2。您只是展示了如何将 enum value 转换为 integer value,它只回答了部分问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多