Состояние ? : оператор в C# - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема с оператором ?:, поэтому я попробовал блок if-else, и все работает нормально. Но при использовании оператора other он просто перестает работать.

using System;

namespace firstGame
{
    class Program 
    {
        public string playerName;
        public int playerScore;
        public int gameNumber;
        public int playerGuess;

        public void GameStart()
        {
            string r;
            Console.WriteLine("Welcome to my first game");
            Console.Write("please enter your gamer name : ");

            this.playerName= Console.ReadLine();

            do
            {    
                this.gameNumber = Convert.ToInt16(new Random().Next(0,10));
                this.playerScore = 1;

                if (this.playerScore == 1)
                {
                    Console.WriteLine("Guess the hidden number between (1-10)");

                    do
                    {
                        Console.Write("guess number {0} :: ", this.playerScore);
                        string num = Console.ReadLine();

                        int.TryParse(num, out _) ? this.playerGuess=Convert.ToInt16(num) : Console.WriteLine("Are you sure it is a number !!?") ;
                        this.playerScore++;
                    } while (this.playerGuess != this.gameNumber);

                    Console.WriteLine("BINGO {0} is the correct number", this.gameNumber);
                    Console.Write("would you like a new lvl ? (Y/N) :: ");  r=Console.ReadLine();
                }
                else 
                { 
                    this.playerScore = 0; 
                    break; 
                }
            } while (r=="Y");
        }

        static void Main(string[] args)
        {
            new Program().GameStart();
        }
    }
}

Я ошибся где-то , а где и как вне меня.

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

При использовании cond ? exp1 : exp2 exp1 и exp2 должны иметь один и тот же тип.

Тернарное выражение не подходит в вашем случае, потому что Console.WriteLine возвращает void, но выражение присваивания является int.

Используйте вместо него традиционный if-else .

Чтобы исправить,

// ERROR: This doesn't compile
int.TryParse(num, out _) ? this.playerGuess=Convert.ToInt16(num) : Console.WriteLine("ar you sure it is a number !!?") ;

должно стать

if (int.TryParse(num, out _)) {
    this.playerGuess = Convert.ToInt16(num)
} else {
    Console.WriteLine("ar you sure it is a number !!?");
}

Бонусный совет:

Вероятно, вы действительно хотите это:

if (int.TryParse(num, out int val)) {
    this.playerGuess = val;
} else {
    Console.WriteLine("Are you sure it is a number?");
}
0 голосов
/ 07 мая 2020

?: не является if then else

Условный оператор

Условный оператор?:, также известный как тернарный условный оператор, оценивает логическое выражение и возвращает результат одного из двух выражений, в зависимости от того, истинно или ложно логическое выражение.

Более того, Console.WriteLine не возвращает результат, это недействительный метод, имеющий побочные эффекты. Таким образом, его нельзя использовать с оператором, точка.

Короче говоря, просто используйте if, то иначе .

...