为什么如果我使用if else它是否有效,如果我使用三元运算符它不会?

时间:2016-04-11 23:50:21

标签: c# ternary-operator

我是C#的新手,我来自C ++。

为什么我使用" if else"它可以工作,但如果我使用三元运算符它不会?

我认为这是因为" Console.Writeline()"在第三部分中,我用一个共同的任务取而代之,但是存在同样的问题。

提前谢谢!

using System;
using System.Collections.Generic;
using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Board
    {
        private char[,] board = new char[3, 3];
        public void move (int g, int x, int y) //player, x , y position
        {
            char sign = ' ';

            switch (g)
            {
                case '1':
                    sign = '0';
                    break;
                case '2':
                    sign = 'x';
                    break;
                default:
                    Console.WriteLine("Input Error");
                    break;
            }

          //error (x > 1 && x < 4 && y > 1 && y < 4) ? (board[x - 1, y - 1] = sign) : (Console.WriteLine("Error"));

            if (x > 1 && x < 4 && y > 1 && y < 4)
            {
                board[x - 1, y - 1] = sign;
            }
            else Console.WriteLine("Error");

        }
    }

    class Game
    {
        static void Main(string[] args)
        {

        }
    }
}

3 个答案:

答案 0 :(得分:4)

编译时会出错,因为tenary运算符必须返回值。它不是if / else块的替代品。

代码执行两个截然不同的事情:一个设置数组的值,另一个输出错误。

答案 1 :(得分:2)

尝试使用类似的东西

board[x-1, y-1] = (x > 1 && x < 4 && y > 1 && y < 4) ? sign : '-';

三元执行将返回一个值

然而,你应该采取不同的方式,如果这个位置超出界限,就会失败 - 在这里你真的不需要三元组。

private int width = 3;
private int height = 3;

...

if ( x > width || y > height || x < 0 || y < 0 )
{
    // fail because position is out of the bounds of the board
}

board[x, y] = sign;

答案 2 :(得分:0)

三元运算符的结果是所选表达式的结果,这意味着两个表达式都需要具有相同的类型。

如果您要使用the comma operator,例如,为了确保第二个表达式与第一个表达式具有相同的类型,我认为您会发现这个编译并运行得很好......

(x > 1 && x < 4 && y > 1 && y < 4) ? (board[x - 1, y - 1] = sign)
                                   : (Console.WriteLine("Error"), sign);

请注意,这对我来说似乎是一个残暴的选择。当我们想要存储选择的结果时,我们倾向于使用三元运算符。 if/else变种似乎是这里的最佳选择......