Тип не найден в классе, когда внутри коммутатора - PullRequest
1 голос
/ 17 февраля 2020

Я использую 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 операторов?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Я не уверен, что именно ваш случай, но в моем случае (используя ваш код), я получаю «CS0150 Ожидается постоянное значение». здесь сообщение об ошибке.

проблема была решена здесь: Случай переключения в C# - ожидается постоянное значение

, вы можете сначала посмотреть на него, это может помочь.

1 голос
/ 17 февраля 2020

Начиная с c# 7.0 оператор switch стал более мощным и охватывает множество сценариев ios.

Но чтобы ответить на ваш вопрос кратчайшим путем, вам нужно ввести постоянное значение в поле вашего дела. Вы можете попробовать поместить переменную или другое строковое свойство из оператора Food внутри оператора switch, но он также не будет работать, потому что switch ищет постоянное значение.

Вы можете посмотреть на документы Microsoft * 1006. * на заявлении выключателя.

...