【问题标题】:How to get enum value having enum type name and enum option name如何获取具有枚举类型名称和枚举选项名称的枚举值
【发布时间】:2017-06-26 20:48:24
【问题描述】:

我有这个枚举:

public enum SomeEnum
{
   None,
   Half,
   All
}

下面的方法体是怎样的,所以我可以得到值 1 有选项“None”和枚举名称“SomeEnum”存储为字符串:

string enumTypeName = "SomeEnum";
string enumPickedOptionName = "None";

方法:

public int GetEnumValue(string enumTypeName, string enumPickedOptionName){}

【问题讨论】:

  • 你试过什么?什么没有奏效?
  • 我几乎可以肯定这是在周五被问到的......

标签: c# enums system.reflection


【解决方案1】:

在枚举名称前使用“命名空间”试试这个:

private int GetEnumValue(string enumTypeName, string enumPickedOptionName)
    {
        int result = -1;
        Type enumType;

        try
        {
            enumType= Type.GetType(enumTypeName);
            result = (int)Enum.Parse(enumType, enumPickedOptionName,true);
        }
        catch (Exception ex)
        {

        }
        finally
        {

        }

        return result;
    }

int value = GetEnumValue("Namespace.SomeEnum", enumPickedOptionName);

【讨论】:

  • 这不起作用,总是从 Type.GetType(enumTypeName);但我解决了,看我的答案。
  • 您在调用函数时是否使用了枚举的命名空间? (例如 - GetEnumValue("EnumNameSpace."+enumTypeName, enumPickedOptionName)
  • 是的,我做到了,也许这不起作用,因为枚举在主项目中引用的另一个项目中,我不知道。
  • 啊,是的...我认为这是您项目的本地枚举。除了已经介绍的内容之外,还有其他一些方法可以做到这一点,但它要求您要么知道枚举类型,要么使用已知的枚举类型的类属性。如果您对具体细节感兴趣,请告诉我(两者都使用 typeof(object) 作为参数而不是表示枚举名称的字符串)。
【解决方案2】:

我是这样解决问题的:

private int GetEnumValue(string assemblyName, string enumTypeName, string enumPickedOptionName)
{
    int result = -1;

    Assembly assembly = Assembly.Load(assemblyName);
    Type enumType = assembly.GetTypes().Where(x => x.Name == 
    enumTypeName).FirstOrDefault();

    result = (int)Enum.Parse(enumType, enumPickedOptionName, true);

    return result;
}

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多