How can I get an enum name from the name of the enum type and an int
从应用程序的另一层,我可以得到枚举类型的名称和整数值。如何使用此数据获取该枚举值的字符串表示形式。
例如,如果我有一个枚举:
1 2 3 4 5 6 7
| public enum Cheese
{
Edam = 1,
Cheddar = 3,
Brie = 201,
RedLeicester = 1001
} |
我能得到的数据是
1 2
| string dataType ="Cheese";
int dataValue = 3; |
如何获得结果:
- 有很多关于如何在Internet上返回/获取枚举名称的例子。你进行了一次富有成效的搜索吗?
- 我得到的大多数结果都假设您在编译时拥有枚举的类型——在本例中,我没有
- 您必须使用反射来获取Cheese枚举及其值,然后
- 字符串名称=(cheese)1).toString();
- Enum类具有采用Type参数的静态helper方法,即:msdn.microsoft.com/en-us/library/…
- 方法:是不是用同样的时间来给出答案,然后告诉这个人搜索网页。你的回答是无用的。我花了15秒钟才给出一个好答案。
- @JDWENG,所以我想我们应该给每个人一个答案来回答这里发布的所有问题。如果是这样的话,那为什么我们中的任何人都应该是程序员/开发人员呢?什么时候我们可以仅仅依靠别人来为我们做工作?????
- 问题是初学者甚至不知道如何搜索网页。即使是经验丰富的人也不总是知道在网上找到信息的关键词。给出一个愚蠢的答案,比如在初学者没有代码的地方发布一个愚蠢的代码,然后当他们发布愚蠢的代码时,给他们负分并没有什么效果。
- @jdweng你花了15秒才给出半个答案。但你没能理解这个问题。另一半,您没有提到的部分,是如何从其名称中获取类型。询问者可以很容易地做一个网络搜索来找出如何做这两个。当然,专家的回答速度比新手的搜索速度要快。那又怎么样?这个问题由websearch解决。如果asker不能搜索到这个,那么他们就不能胜任程序员的工作。很多次都是骗局。因此关闭它。
- 大卫,你又错了。ops simple想要从数字中获取字符串。
- @JD翁仔细阅读。或者甚至阅读。枚举类型在编译时未知。接受的答案应该让你明白。我知道你不喜欢被纠正,但不要让骄傲妨碍理智。
除了枚举本身的名称之外,还应该知道枚举声明的命名空间和程序集。假设在定义了枚举的程序集中运行下面的代码,并且所有枚举都在编译时知道的同一命名空间中定义,则可以这样做:
1 2 3 4
| string dataType ="Cheese";
int dataValue = 3;
var enumType = Type.GetType("Namespaces.Of.Your.Enums." + dataType);
var name = Enum.GetName(enumType, dataValue); |
如果枚举位于运行此代码的其他程序集中,则需要提供枚举类型的程序集限定名(再次使用命名空间)。
1 2
| Type t = Type.GetType(dataType)
string value = Enum.GetName(t, dataValue) |
应该做的技巧(未整理,在地铁上)
- 这假定在变量数据类型中有该类型的实例。在我的情况下,我只有字符串"cheese",所以类型应该是字符串。获取实际枚举的类型是我缺少的过程的一部分。
- 不,type.gettype从类型名中获取类型。请参阅@evk answer了解更详细的解释。您需要向类型名添加名称空间(如果有的话)。
- 啊,是的-限定类型名是实现此目的所必需的-我认为出于某种原因,我误读为使用datatype.gettype()!我的错。
enum.parse()将是您的朋友。
像这样:
1 2
| int cheeseType = 1;
(Cheese )Enum.Parse(typeof(Cheese ), cheeseType .ToString()); |
- 这假定您在编译时将奶酪作为一种类型。在我看来,"奶酪"是一根绳子。这是我想要的那种
- 这行不通。您只有Cheese类型的名称,而不是类型本身。
- 你说得对,我错过了那一点。