当枚举不同时,将枚举转换为枚举不起作用

时间:2012-03-30 08:01:55

标签: c# .net enums

处理一个项目,在这个项目中,他们有很多枚举,并且有多个dll中的大量重复对象。  一团糟但让我们继续前进。

我有这个扩展方法,在将枚举转换为Enum时,在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因此无法更改枚举顺序

1 个答案:

答案 0 :(得分:7)

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

编辑:将“Parse”更改为正确的“TryParse”。此外,TryParse方法有一个重载,如果你想要它使它不区分大小写:

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