У меня есть 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.