Преобразование перечисления в перечисление не работает, если не в том же порядке - PullRequest
2 голосов
/ 30 марта 2012

Работа над проектом, в котором есть много перечислений и множество дублированных объектов в нескольких библиотеках.Беспорядок, но давайте двигаться дальше.

У меня есть этот метод расширения, который работает при преобразовании Enum в Enum, которые имеют одинаковую позицию в 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);
            }               
        }
    }

РЕДАКТИРОВАТЬ

Некоторые библиотеки не контролируются, поэтому я не могу изменить порядок перечисления

1 Ответ

7 голосов
/ 30 марта 2012
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...