如果我们想要把字符串转成枚举类型,NetCore和.NET>4时我们都可以直接使用

Enum.TryParse("item", out ItemEnum myItem);

在最新的>C#7中我们又有了新方法,在使用过程中最好用以下方法:

ItemEnum myItem = (ItemEnum) Enum.Parse(typeof(ItemEnum), "item", true);

可以把它封装一下,变成一个通用方法

public static T ParseEnum<T>(string value)
{
    return (T) Enum.Parse(typeof(T), value, true);
}

像下面这样调用:

ItemEnum myItem= EnumUtil.ParseEnum<ItemEnum>("item");

或者也可以封装成扩展方法

public static T ToEnum<T>(this string value)
{
    return (T) Enum.Parse(typeof(T), value, true);
}

ItemEnum myItem = "item".ToEnum<ItemEnum>();

在这个基础上如果我们想在没有匹配上时返回默认值,可以封装成这样:

public static T ToEnum<T>(this string value, T defaultValue) 
{
    if (string.IsNullOrEmpty(value))
    {
        return defaultValue;
    }
    T result;
    return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}

使用方法如下 :

ItemEnum myItem = "item".ToEnum(ItemEnum.One);

推荐文章:

C# 通过Expression高效的把dynamic转成实体类

C# new IEnumerable 怎么初始化?

C# 中yield 的用法以及性能提升

C# 字符串转成枚举正确的方法

c# 无损高质量压缩图片

C# List Sort 自定义排序方法实现