【问题标题】:How can I get an enum name from the name of the enum type and an int [duplicate]如何从枚举类型的名称和 int [重复] 中获取枚举名称
【发布时间】:2018-04-05 10:39:48
【问题描述】:

从应用程序的另一层,我可以取回枚举类型的名称和一个整数值。如何使用这些数据来获取该枚举值的字符串表示形式。

例如,如果我有一个枚举:

public enum Cheese
{
    Edam = 1,
    Cheddar = 3,
    Brie = 201,
    RedLeicester = 1001
}

而我现有的数据是

string dataType = "Cheese";
int dataValue = 3;

我怎样才能得到结果:

"Cheddar"

【问题讨论】:

  • 网上有很多关于如何返回/获取枚举名称的例子..你进行了富有成效的搜索吗..?
  • 我得到的大多数结果都假设您在编译时具有枚举的类型 - 在这种情况下,我没有
  • 您必须使用反射来获取 Cheese 枚举及其值,然后
  • @jdweng,所以我想我们应该为每个人提供这里发布的所有问题的答案..如果是这样的话,那么我们为什么要成为程序员/开发人员......当我们可以只依靠别人为我们做的工作..? ???
  • 问题是初学者甚至不知道用什么来搜索网络。即使是经验丰富的人也不总是知道在网络上查找信息的关键词。给出一个愚蠢的答案,比如初学者没有代码的帖子代码,然后当他们发布愚蠢的代码给他们负分时没有任何成果。

标签: c# enums


【解决方案1】:

除了枚举本身的名称之外,您还应该知道声明枚举的命名空间和程序集。假设您在定义枚举的程序集中运行下面的代码,并且所有枚举都定义在您在编译时知道的同一命名空间中,您可以这样做:

string dataType = "Cheese";
int dataValue = 3;
var enumType = Type.GetType("Namespaces.Of.Your.Enums." + dataType);
var name = Enum.GetName(enumType, dataValue);

如果您的枚举位于运行此代码的另一个程序集中 - 您将需要提供您的枚举类型的程序集限定名称(同样带有命名空间)。

【讨论】:

    【解决方案2】:
    Type t = Type.GetType(dataType)
    string value = Enum.GetName(t, dataValue)
    

    应该可以解决问题(未编译,在地铁上)

    【讨论】:

    • 这假定您在变量 dataType 中有一个类型的实例。在我的情况下,我只有字符串“Cheese”,所以 Type 是字符串。获取实际枚举的类型是我缺少的过程的一部分。
    • 否,Type.GetType 从类型名称中获取类型。有关更详细的解释,请参阅@Evk 答案。您需要将命名空间添加到类型名称(如果有)。
    • 啊,是的 - 限定类型名称是这样做的必要条件 - 我想我因为某种原因误读为使用 dataType.GetType() !我的错。
    【解决方案3】:

    enum.Parse() 会是你的朋友。

    像这样:

    int cheeseType = 1;
    (Cheese)Enum.Parse(typeof(Cheese), cheeseType.ToString());
    

    【讨论】:

    • 这假设您在编译时将 Cheese 作为类型。在我的情况下,“奶酪”是一个字符串。这是获得我缺少的类型的反射
    • 这行不通。您只有 Cheese 类型的名称,而不是类型本身。
    • 你说得对,我错过了这一点
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多