我正在使用像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
语句中使用我的类?
从c#7.0开始,switch语句变得更加强大,涵盖了许多场景。
但是要以最简单的方式回答您的问题,您需要在case字段中输入一个恒定值。您可以尝试将Food中的变量或其他字符串属性放入switch语句中,但由于switch正在寻找常数值,因此它也不起作用。
您可以查看switch语句上的microsoft docs。
我不确定您的情况到底是什么,但是在我的情况下(使用您的代码),我得到的是'CS0150期望为常数值。'错误消息。
这里已回答问题:Switch case in C# - a constant value is expected
您可能先看一下,可能会有帮助。