Как устранить ошибку «не удается неявно преобразовать тип ‘int’ в тип ‘string'»?

#c#

#c#

Вопрос:

Я пытаюсь создать программу на C # с двумя классами, которые будут принимать решение на основе вводимых пользователем данных для вывода ответа (например, пользователь говорит rock, а компьютер говорит paper), из-за чего пользователь всегда проигрывает. В настоящее время у меня есть ошибки, говорящие

«Не удается неявно преобразовать тип ‘int’ в тип ‘strin&'» в строках со всеми регистрами («case1:», «case2:», «case3:»).

Тем не менее, я определил «nameClassif» как строку чуть выше. У меня также есть предупреждение: Предупреждение CS0649: Поле ‘Player.classif’ никогда не присваивается и всегда будет иметь значение по умолчанию null

 usin& System;
usin& static System.Console;

namespace Tes
{
    class PlayerApp
    {
        public static void Main()
        {
            Player player1 = new Player();
            player1.PlayerChoice = InputValue();
            player1.Classif = InputValue();
            Clear();

            Write(player1);
            Write("nnnn");
            ReadKey();
        }

        public static strin& InputValue()
        {
            Write("Please enter rock, paper, or scissors:t");
            return ReadLine();
        }

    }

    class Player
    {
        private strin& classif;


        // constructors
        public Player()
        { }

        public Player(strin& pC)
        {
            PlayerChoice = pC;
        }

        // properties
        public strin& PlayerChoice { &et; set; }

        public strin& Classif { &et; set; }

        public double SetFine()
        {
            if (classif == "rock")
            {
                WriteLine("The computer chose paper. You lose.");

            }

            else if (classif == "paper")
            {
                WriteLine("The computer chose scissors. You lose.");
            }

            else if (classif == "scissors")
            {
                WriteLine("The computer chose rock. You lose.");
            }


            return SetFine();
        }

public strin& ReturnNameOfClassification()
        {

            strin& nameClassif;
            switch (classif)
            {
                case 1: nameClassif = "rock"; break;
                case 2: nameClassif = "paper"; break;
                case 3: nameClassif = "scissors"; break;
                default:
                    WriteLine("Invalid selection..."  
                              " I assume you chose rock... :");
                    nameClassif = "rock - ???"; break;
            }
            return nameClassif;
        }

        public override strin& ToStrin&()
        {
            return "nnnttRock-Paper-Scissors"  
                "nThe computer choset"   PlayerChoice;
        }
    }
}
  

Комментарии:

1. Ответ на основе названия вашего вопроса: strin& a = 5;

2. @John (OP john) Сработал ли для вас какой-либо из ответов? Если это так, пожалуйста, отметьте один из них как принятый ответ, используя галочку под стрелкой вниз.

Ответ №1:

Проблема в том, что вы объявляете classif как strin& , но сравниваете его с int :

 private strin& classif;
switch (classif)
{
    case 1: nameClassif = "rock"; break; // 1 is an int, not a strin&!
}
  

Короче говоря: «5» не равно 5 и не сравнимо с 5. Чтобы исправить это, вы должны сравнить like с подобным вместо:

 switch (classif)
{
    case "1": nameClassif = "rock"; break;
    case "2": nameClassif = "paper"; break;
    case "3": nameClassif = "scissors"; break;
    default:
        WriteLine("Invalid selection..."  
                  " I assume you chose rock... :");
        nameClassif = "rock - ???"; break;
}
  

Теперь сравниваемый тип совпадает с типом, с которым вы его сравниваете, поэтому код работает.

Ответ №2:

При использовании switch инструкции значения в инструкции case должны соответствовать типу переменной, которую вы включаете. Вы включаете classif , что является strin& , но ваши case операторы 1, 2, 3, которые являются int

Ответ №3:

Этот:

случай 1, 2, 3 означает целое число.. вот почему он возвращает ошибку.

  case "1": nameClassif = "rock"; break;
  case "2": nameClassif = "paper"; break;
  case "3": nameClassif = "scissors"; break;