Условный оператор.Ошибка CS0266 Невозможно неявно преобразовать тип 'int' в 'byte' - PullRequest
0 голосов
/ 22 сентября 2018

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

У меня только одна проблема:

Ошибка CS0266 Невозможно неявно преобразовать тип int в байт.Существует явное преобразование (вам не хватает приведения?)

Я испробовал много разных решений, но все неудачи, поэтому, пожалуйста, помогите.Как исправить это преобразование?

public static byte SqlGetByte(DbDataReader sr, int col, ConnectionString connection)
{
    return (sr[col] == DBNull.Value) ? 0 : (connection.OraDb ? Convert.ToByte(sr.GetDecimal(col)) : sr.GetByte(col));
}

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Если sr[col] == DBNull.Value равно true, вы возвращаете 0, тогда как метод возвращает byte.

Измените его на:

return (sr[col] == DBNull.Value) ? Convert.ToByte(0) : (connection.OraDb ? Convert.ToByte(sr.GetDecimal(col)) : sr.GetByte(col));
0 голосов
/ 22 сентября 2018

Просто приведите к byte

return (byte)((sr[col] == DBNull.Value) ? 0 : (connection.OraDb ? Convert.ToByte(sr.GetDecimal(col)) : sr.GetByte(col)));

// or

return (sr[col] == DBNull.Value) ? (byte)0 : (connection.OraDb ? Convert.ToByte(sr.GetDecimal(col)) : sr.GetByte(col));

Из спецификации

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

... Условное выражение формы б?Сначала x: y вычисляет условие b ...

Второй и третий операнды x и y оператора?: управляют типом условного выражения.

  • Если x имеет тип X, а y имеет тип Y, тогда

    • Если X и Y имеют одинаковый тип, то это тип условного выражения.
    • В противном случае,если неявное преобразование (§11.2) существует из X в Y, но не из Y в X, тогда Y является типом условного выражения.
    • В противном случае, если неявное преобразование перечисления (§11.2.4)существует от X до Y, тогда Y является типом условного выражения.
    • В противном случае, если неявное преобразование перечисления (§11.2.4) существует из Y в X, то X является типом условного выражения.
    • В противном случае, если неявное преобразование (§11.2) существует из Y в X, но не из X в Y , тогда X является типом условного выражения .
    • В противном случае тип выражения не может быть определен, ивозникает ошибка времени компиляции.
  • Если только один из x и y имеет тип, и оба x и y неявно преобразуются в этот тип, то это тип условного выражения.
  • В противном случае тип выражения не может быть определен, и возникает ошибка времени компиляции.

Учитывая

return condition ? x(int) : y(condition ? x2(byte)) : y2(byte));

Пример

byte y = 123;
int x = 234;

x = y; // y can implicitly convert to x
y = x; // error, x cant implicitly convert to y

В итоге результирующий тип Условного оператора хочет быть int, а вы возвращаете byte изтвой метод.Компьютер говорит, что нет ... По крайней мере, вам нужно будет где-то кастовать

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