C#: конвертирование Enum’ов

Рейтинг: 1Ответов: 2Опубликовано: 17.05.2023

Время от времени приходится писать весьма стандартный код, когда есть два Enum'а с абсолютно одинаковым содержимым, но находящиеся в разных неймспейсах.

Подключать лишние зависимости - нельзя (ну, по архитектурным соображениям), поэтому возникает вот такой вот (прямо скажем, не особо остроумный) код:

в namespace1:

    public enum InTheRace
    {
        First,
        Second,
        Third
    }

в namespace2:

    public enum OnThePedestal
    {
        First,
        Second,
        Third
    }

И наконец, есть код "конвертера", который преобразует значения из одного неймспейса в другое: (сам "конвертер" содержится в таком месте, где есть ссылки на оба немспейса)

    public static OnThePedestal ToOnThePedestal (InTheRace src)
    {
            switch (src)
            {
                case InTheRace.First:
                    return OnThePedestal.First;

                case InTheRace.Second:
                    return OnThePedestal.Second;

                case InTheRace.Third:
                    return OnThePedestal.Third;
             }
    }

Что то мне подсказывает, что человечество давно уже изобрело для таких смешных преобразований что то типа автомэппера.

Можно мне подсказать, как это делать "по умному"?

Спасибо!

Ответы

▲ 1Принят

В данном случае значения совпадают, можно просто делать каст

public static OnThePedestal ToOnThePedestal(InTheRace src)
{
    return (OnThePedestal)src;
}

Работает это потому что значения энумов одинаковые, полная эквивалентная запись выглядела бы вот так:

public enum InTheRace : int
{
    First = 0,
    Second = 1,
    Third = 2
}
public enum OnThePedestal : int
{
    First = 0,
    Second = 1,
    Third = 2
}
▲ 0
Enum.ToObject(typeof(OnThePedestal), src)