首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过在字符串中指定枚举类型

如何通过在字符串中指定枚举类型
EN

Stack Overflow用户
提问于 2014-08-20 12:04:55
回答 4查看 19.8K关注 0票数 5

假设我有这个Enum:

代码语言:javascript
运行
复制
namespace BusinessRule
{
    public enum SalaryCriteria : int
        {
            [EnumDisplayName(DisplayName = "Per Month")]
            Per_Month = 1,
            [EnumDisplayName(DisplayName = "Per Year")]
            Per_Year = 2,
            [EnumDisplayName(DisplayName = "Per Week")]
            Per_Week = 3
        }
}

我把它的名字放在一个字符串变量中,如下所示:

代码语言:javascript
运行
复制
string EnumAtt = "SalaryCriteria";

我试图检查这个Enum是否由这个名称定义,如果定义了,我想得到它的实例。我尝试过这样做,但是type正在返回null

代码语言:javascript
运行
复制
string EnumAtt = "SalaryCriteria";
Type myType1 = Type.GetType(EnumAtt);

我也尝试过这样做:

代码语言:javascript
运行
复制
string EnumAtt = "BusinessRule.SalaryCriteria";
Type myType1 = Type.GetType(EnumAtt);

知道我怎么能做到这一点吗。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-20 12:34:28

要在当前AppDomain中的所有加载程序集中搜索给定的枚举--而不具有完全限定的程序集名称--您可以这样做:

代码语言:javascript
运行
复制
    public static Type GetEnumType(string enumName)
    {
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            var type = assembly.GetType(enumName);
            if (type == null)
                continue;
            if (type.IsEnum)
                return type;
        }
        return null;
    }

例如(选择不在程序集中的semi-random enum ):

代码语言:javascript
运行
复制
var type1 = Type.GetType("System.Xml.Linq.LoadOptions") // Returns null.
var type2 = GetEnumType("System.Xml.Linq.LoadOptions") // Returns successfully.

您的名称仍然应该包括名称空间。

票数 15
EN

Stack Overflow用户

发布于 2014-08-20 12:59:03

一个LINQ启发的答案:

代码语言:javascript
运行
复制
public static Type GetEnumType(string name)
{
  return 
   (from assembly in AppDomain.CurrentDomain.GetAssemblies()
    let type = assembly.GetType(name)
    where type != null
       && type.IsEnum
    select type).FirstOrDefault();
}

原因是您需要遍历所有已加载的程序集,而不仅仅是当前程序集。

票数 4
EN

Stack Overflow用户

发布于 2014-08-20 12:18:05

这对我很有用。

代码语言:javascript
运行
复制
Type myType1 = Type.GetType("BusinessRule.SalaryCriteria");

我尝试过没有"EnumDisplayName“属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25404237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档