2012-03-30 44 views
2

工作在一个项目中,他们在多个dll中有很多枚举和大量重复对象。 混乱,但让我们继续前进。将enum转换为枚举时不能工作

我有转换的枚举到枚举具有在枚举 同一位置时的工作原理是扩展方法但是如果名字是一样的,但枚举的位置不同,它失败

怎样改进我的代码,以便它获取基于名称匹配,无论正确的枚举,其中位于枚举

感谢

[TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void ToEnum_convert_returnsCorrectEnum() 
     { 
      const CategoryA categoryALawyer = CategoryA.Lawyer; 
      var result = categoryALawyer.ToEnum<CategoryB>(); 

      Assert.AreEqual(CategoryA.Lawyer.ToString(),result.ToString()); 
     } 
    } 


    namespace Utilities 
    { 
     public enum CategoryA 
     { 
      Lawyer, 
      Developer, 
      Manager, 
      Employee, 
      Director, 

     } 

     public enum CategoryB 
     { 
      Director, 
      Manager, 
      Developer, 
      Employee, 
      Lawyer 
     } 

     public static class EnumExtensions 
     { 
      public static T ToEnum<T>(this Enum value) 
      { 
       return (T)Enum.ToObject(typeof(T), value); 
      }    
     } 
    } 

编辑

某些DLL我没有控制权,所以我不能改变枚举为了

+4

如果不同的订购名称,这些名称将对应不同的值,除非你手动分配。这基本上是枚举如何工作的,并且是通过设计的。 – BoltClock 2012-03-30 08:04:37

+1

这种行为在您考虑时并不令人意外。请记住,您可以显式将Enum值转换为Ints并返回。 – McGarnagle 2012-03-30 08:06:34

+0

我不知道这个编译'Director,'(在'CategoryA'中)。 – 2012-03-30 08:07:41

回答

7
T val; 
if (Enum.TryParse<T>(value.ToString(), out val)) 
    return val; 
else return default(T); 

编辑:改“解析”正确“的TryParse”。此外,该方法的TryParse具有过载,使之不区分大小写的,如果你想:

Enum.TryParse<T>(value.ToString(), true, out val) 
+0

谢谢你的工作 – user9969 2012-03-30 08:36:42