Тип условного выражения не может быть определен как - PullRequest
19 голосов
/ 02 апреля 2011

Когда я компилирую свой проект C # в 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))

Помощь с благодарностью!

Ответы [ 2 ]

27 голосов
/ 02 апреля 2011

Условный оператор является выражением, поэтому ему требуется тип возвращаемого значения, и оба пути должны иметь одинаковый тип возвращаемого значения.

(painting || action == 1) ? type : (byte)0
5 голосов
/ 02 апреля 2011

Неявного преобразования между byte и int не существует, поэтому вам необходимо указать его в результатах троичного оператора:

? type : (byte)0

Оба типа возвращаемых значений для этого оператора должны быть либото же самое или имейте неявное преобразование, определенное для работы.

Из MSDN ?: Operator:

Либо тип first_expression и second_expression должен бытьто же самое, или неявное преобразование должно существовать из одного типа в другой.

...