从字符串返回基础枚举值会产生错误无法找到类型或命名空间名称“enumType”

时间:2014-09-03 06:51:12

标签: c# dynamic enums

我正在尝试编写一个简单的帮助器方法,该方法返回该枚举的指定字符串表示形式的基础枚举! 这是我目前编写的代码

  public static dynamic GetEnum(Type enumType, string EnumValue)
    {
        return (enumType)Enum.Parse(enumType, EnumValue);
    }

我正在

  

错误1类型或命名空间名称' enumType'无法找到(是   你错过了使用指令或程序集引用?)

编辑: 这是完成的方法,如下所示:

    public static EnumType GetEnum<EnumType>(string EnumValue) where EnumType : struct
{
    EnumType result;
    Enum.TryParse<EnumType>(EnumValue, out result);
    return result;
}

2 个答案:

答案 0 :(得分:2)

我正在使用一些扩展方法,请看看

public static T ParseEnum<T>(this string valueToParse) where T : struct, IConvertible
        {
            return EnumParse<T>(valueToParse);
        }

        private static T EnumParse<T>(object valueToParse) where T : struct, IConvertible
        {
            T defaultValue = default(T);

            if (valueToParse != null && Enum.IsDefined(typeof(T), valueToParse))
            {
                try
                {
                    return (T)valueToParse;
                }
                catch (Exception e)
                {
                    Enum.TryParse<T>(valueToParse.ToString(), out defaultValue);
                }
            }

            return defaultValue;
        }

答案 1 :(得分:1)

您无法转换为Type实例,但是:您不需要。如果是dynamic,则无需执行任何操作:值已经装箱EnumValue

return Enum.Parse(enumType, EnumValue);

但是,仿制药可能是一种更好的方法。您可能希望查看现有的TryParse<T>方法。这将是而不是使用Type<T>Type不能很好地融合在一起。