Convert.ChangeType 如何将字符串转换为枚举类型

38
  public static T Convert<T>(String value)
  {
    return (T)Convert.ChangeType(value, typeof(T));
  }

   public enum Category 
   {
       Empty,
       Name,
       City,
       Country
   }

  Category cat=Convert<Category>("1");//Name=1

当我调用 Convert.ChangeType 时,系统会因为无法将 String 转换为 Category 抛出异常。 如何进行转换? 也许我需要为我的类型实现任何转换器?

1
Enum.Parse(typeof(Category), "City", true); - Ahmad Ibrahim
2个回答

88

使用Enum.Parse方法来完成此操作。

public static T Convert<T>(String value)
{
    if (typeof(T).IsEnum)
       return (T)Enum.Parse(typeof(T), value);

    return (T)Convert.ChangeType(value, typeof(T));
}

哇!这是一个很棒的补充。 - Mixer
3
(T)Enum.Parse(typeof(T), value, true); // Ignore case: true. - Evgeni Nabokov

12

.Net Core版本:

public static T Convert<T>(string value)
{
    if (typeof(T).GetTypeInfo().IsEnum)
        return (T)Enum.Parse(typeof(T), value);

    return (T)System.Convert.ChangeType(value, typeof(T));
}

(T)Enum.Parse(typeof(T), value, true) // Ignore case: true. - Evgeni Nabokov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接