вернуть нужный enum из функции

есть несколько enum:

public enum Color
    {
        Red,
        Green,
        Blue,
    }

public enum Genre
    {
        Epic,
        Epos,
        Novel,
    }

public enum Season
    {
        Winter,
        Spring,
        Autmn,
        Summer,
    }

мне известны их имена в виде массива строк {"Color", "Genre", "Season"}. нужна функция, которая бы идентифицировала какой именно это enum и возвращала его.

хочется чтобы всё работало как-то так:

public Enum GetEnum(string name)
        {
            switch (name)
            {
                case "Color":
                    return Color;
                    break;
                case "Genre":
                    return Genre;
                    break;
                case "Season":
                    return Season;
                    break;
            }
        }

но оно так не работает, так как реализовать такой функционал?

задание из лабы:

На главном окне разместите элемент TabControl, на котором должна быть одна вкладка с названием Enums. TabControl разместите во весь размер окна

На вкладке Enums разместите два списка (ListBox) и текстовое поле. Первый список должен содержать перечень всех реализованных перечислений. По умолчанию выбран первый элемент списка.

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

При выборе любого значения перечисления во втором списке, в соответствующем текстовом поле должно отобразиться его числовое значение (числовое значение должно определяться явным преобразованием перечисления в целое число).


Ответы (1 шт):

Автор решения: aepot

Enum это не объект, а набор констант, использующийся только на этапе компиляции, то есть это тип, а не объект, вы не можете вернуть Enum из метода, так как у него отсутствует возможность создать экземпляр. Конечно, можно вернуть тип перечисления, и из него достать значения.

public static Type GetEnum(string name)
{
    switch (name)
    {
        case "Color":
            return typeof(Color);
        case "Genre":
            return typeof(Genre);
        case "Season":
            return typeof(Season);
    }
    return null;
}

static void Main(string[] args)
{
    Type enumType = GetEnum("Color");
    foreach (object value in Enum.GetValues(enumType))
    {
        Console.WriteLine(value);
    }
}

Вывод в консоль

Red
Green
Blue

Но с таким же успехом не проще ли использовать словарь?

static void Main(string[] args)
{
    Dictionary<string, string[]> values = new()
    {
        ["Color"] = ["Red", "Green", "Blue"],
        ["Genre"] = ["Epic", "Epos", "Novel"],
        ["Season"] = ["Winter", "Spring", "Autumn", "Summer"]
    };

    foreach (string value in values["Color"])
    {
        Console.WriteLine(value);
    }
}

Результат тот же.

→ Ссылка