Ответ 1
Условный оператор является выражением и, следовательно, ему нужен тип возврата, и оба пути должны иметь одинаковый тип возврата.
(painting || action == 1) ? type : (byte)0
Когда я скомпилирую свой проект С# в MonoDevelop, я получаю следующую ошибку:
Type of conditional expression cannot be determined as 'byte' and 'int' convert implicitly to each other
Фрагмент кода:
byte oldType = type;
type = bindings[type];
//Ignores updating blocks that are the same and send block only to the player
if (b == (byte)((painting || action == 1) ? type : 0))
{
if (painting || oldType != type) { SendBlockchange(x, y, z, b); } return;
}
Это строка, выделенная в ошибке:
if (b == (byte)((painting || action == 1) ? type : 0))
Помощь с благодарностью!
Условный оператор является выражением и, следовательно, ему нужен тип возврата, и оба пути должны иметь одинаковый тип возврата.
(painting || action == 1) ? type : (byte)0
Нет никакого неявного преобразования между byte
и int
, поэтому вам нужно указать его в результатах тройного оператора:
? type : (byte)0
Оба типа возвращаемых данных для этого оператора должны быть одинаковыми или иметь неявное преобразование, определенное для работы.
Из MSDN ?: Operator
:
Любой тип выражения first_expression и second_expression должен быть одинаковым, или неявное преобразование должно существовать от одного типа к другому.