如何通过枚举类型的名称和一个整数获得枚举名称

4

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

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

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

我可用的数据为

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

我该如何获取结果:
"Cheddar"

2
{btsdaf} - MethodMan
{btsdaf} - Kaine
1
{btsdaf} - MethodMan
1
{btsdaf} - jdweng
再次说,David,你错了。原帖的意思只是想从数字中得到字符串。 - jdweng
显示剩余6条评论
3个回答

7

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

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

如果你的枚举类型在这段代码所运行的程序集之外,那么你需要提供包含命名空间的完整程序集限定名来指定枚举类型。

4
Type t = Type.GetType(dataType)
string value = Enum.GetName(t, dataValue)

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

这假设您在变量dataType中有一个类型的实例。在我的情况下,我只有字符串“Cheese”,所以Type应该是字符串。获取实际枚举的类型是我缺失的部分。 - Kaine
{btsdaf} - Erik A. Brandstadmoen
1
{btsdaf} - Kaine

0

在这里,enum.Parse() 将是你的好朋友。

像这样:

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

{btsdaf} - Kaine
{btsdaf} - Erik A. Brandstadmoen
噢,你说得对,我漏掉了那个点。 - Michael Di Felice

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