【问题标题】:Create enum class to assign Index [duplicate]创建枚举类以分配索引[重复]
【发布时间】:2018-09-16 11:22:49
【问题描述】:

我从输入中得到一个字符串,我想给它一个如下索引:

例如:

string Name = "Jack"

有5种可能性:

Jack   = 1, 
Alice  = 2,
Stiven = 3,
Alex   = 4,
Katrin = 5

当我从输入中获取名称时,我想通过这个枚举类并获取它的索引

【问题讨论】:

  • 改用Dictionary<string, int>
  • 你声明了这个枚举吗?如果是这样,请发布代码。或者“这个枚举类”是什么意思?
  • @MongZhu 我不知道如何创建它
  • 你不知道如何声明一个枚举?这是documentation
  • 但是你可以写new Dictionary<string, int> { { "Mong Zhu", 1 }}

标签: c#


【解决方案1】:

你可以试试Enum.TryParse,方法如下:-

string Name="Jack";
enum CustomEnum {
  Jack=1,
  Alice=2,
  Stiven=3,
  Alex=4,
  Katrin=5
}

CustomEnum TheName;
if (Enum.TryParse(Name, out TheName))
{
    switch (TheName) { 
      case Jack: /* code here*/ break;
      case Alice: /* code here*/ break;
      /* and so on */
    }
}

【讨论】:

    【解决方案2】:

    更好地使用字典,它们的目的是存储与给定对象相对应的值。

    Dictionary<string, int> dict = new Dictionary<string, int>() { 
      {"Jack", 1 }, {"Alice", 2 }, {"Steven", 3 }, {"Alex", 4 }, {"Katrin", 5 }};
    
    string name = "Jack";
    
    int value = dict[name]; // returns 1
    

    【讨论】:

    • if (dict.TryGetValue(name, out var value)) {/* name found its index is value */} else { /* not found */}
    【解决方案3】:

    试试这个。

    using System;
    
    public class Test {
     enum Names {
      Jack = 1,
       Alice,
       Stiven,
       Alex,
       Katrin
     };
     public static void Main() {
    
      string Name = "Alex";
      Names eName;
      Enum.TryParse < Names > (Name, out eName);
      Console.WriteLine((int) eName);
     }
    }
    

    在这里演示:https://ideone.com/ArhV67

    【讨论】:

      【解决方案4】:

      首先声明一个枚举:

      enum Names
      {
          Jack = 1,
          Alice = 2,
          Stiven = 3,
          Alex = 4,
          Katrin = 5
      }
      

      然后使用Enum.TryParse 获取匹配"Jack" 的枚举,最后将myNames 转换为int 以获得所需的索引:

      string Name = "Jack";
      Names myNames;
      Enum.TryParse(Name, out myNames);
      int index = (int)myNames;
      

      【讨论】:

      • 你不需要提前声明myNames,这就是out的优势。你可以这样做:Enum.TryParse(Name, out Names myNames);
      • @L.Guthardt 我按照你的方法试过了,但没用。我正在使用 Visual Studio 2015
      • TryParse 确实返回了一个 bool,表示解析是否有效。
      • @bradbury9 我知道它返回一个布尔值,但我没有将它赋值给变量,因为我不必使用它。我使用 TryParse 来避免异常
      • @SlavenHvar 看看MSDN about out。可以在方法参数部分中实例化参数。
      猜你喜欢
      • 2013-11-06
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多