Почему я не могу использовать свой тип enum внутри выражения switch? - PullRequest
1 голос
/ 15 апреля 2020

У меня есть enum с именем Category, но с несколькими специальными атрибутами для перевода Enum в другой язык.

public enum Category
{
    [StringValue("Varm mat")]
    HotFood,
    [StringValue("Kald mat")]
    ColdFood,
}

Я пытаюсь отобразить строковое значение в enum используя выражение switch, но я получаю ошибку компиляции: The type name 'HotFood' does not exist on the type 'Category' (и аналогично для ColdFood). GetStringValue() - это метод расширения, который мы написали для получения атрибута StringValue для Enum.

public static Category MapStringToCategory(string stringValue)
{
    var thisOneWorks = Category.HotFood.GetStringValue(); // this debug line works fine
    return stringValue switch
    {
        Category.HotFood.GetStringValue() => Category.HotFood, // error: 'HotFood' does not exist on the type 'Category'
        Category.ColdFood.GetStringValue() => Category.ColdFood, // error: 'ColdFood' does not exist on the type 'Category'
        _ => throw new InvalidOperationException($"No string value for {stringValue}")
    };
}

Я не могу понять, почему Category.HotFood отлично работает вне выражений-переключателей, но не внутри них. Я также пытался с обычным оператором switch, но та же ошибка. Был бы признателен за некоторый вклад. Я использую C# 8 и. NET Core 3.1.

1 Ответ

1 голос
/ 15 апреля 2020

Как указано в моем комментарии - Случай значение должно быть известно во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...