我是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)
{
}
}
}
答案 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
变种似乎是这里的最佳选择......