Я использую class
как enum
, потому что мои записи нуждаются в пользовательском строковом представлении:
using System.Collections.Generic;
namespace MyProject
{
internal class Food
{
private string _value = "";
private Food(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
internal static Food RedApple = new Food("red_apple");
internal static Food YellowBanana = new Food("yellow_banana");
internal static Food GreenMango = new Food("green_mango");
}
}
Я могу использовать поля static
, например Food.RedApple
, просто отлично:
if (str == Food.RedApple.ToString())
Console.WriteLine("apple");
else if (str == Food.YellowBanana.ToString())
Console.WriteLine("banana");
else if (str == Food.GreenMango.ToString())
Console.WriteLine("mango");
else
Console.WriteLine("unknown");
Однако, когда я использую их внутри switch
операторов, таких как:
using System;
namespace MyProject
{
class Program
{
static void Main(string[] args)
{
string str = "red_apple";
switch (str)
{
case Food.RedApple.ToString():
Console.WriteLine("apple");
break;
case Food.YellowBanana.ToString():
Console.WriteLine("banana");
break;
case Food.GreenMango.ToString():
Console.WriteLine("mango");
break;
default:
Console.WriteLine("unknown");
break;
}
}
}
}
Я получаю следующую ошибку:
Имя типа RedApple
не существует в типе Food
[MyProject]
Что именно здесь происходит, и означает ли это, что я не могу использовать свой класс внутри switch
операторов?