在交换机内部时在类中找不到类型

问题描述 投票:1回答:2

我正在使用像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# class types enums switch-statement
2个回答
1
投票

从c#7.0开始,switch语句变得更加强大,涵盖了许多场景。

但是要以最简单的方式回答您的问题,您需要在case字段中输入一个恒定值。您可以尝试将Food中的变量或其他字符串属性放入switch语句中,但由于switch正在寻找常数值,因此它也不起作用。

您可以查看switch语句上的microsoft docs


1
投票

我不确定您的情况到底是什么,但是在我的情况下(使用您的代码),我得到的是'CS0150期望为常数值。'错误消息。

这里已回答问题:Switch case in C# - a constant value is expected

您可能先看一下,可能会有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.