条件运算符。错误CS0266无法将类型'int'隐式转换为'byte'

时间:2018-09-22 06:47:39

标签: c# type-conversion

我需要有关此转换的帮助。 我已经反编译了一个旧的dll文件,因为我需要进行一些小的更改并且我没有原始的源代码,但是在开始进行这些更改之前,我希望可以编译原始的代码。

我只有一个问题:

  

错误CS0266无法将类型'int'隐式转换为'byte'。一个   存在显式转换(您是否缺少演员表?)

我尝试了许多不同的解决方案,但是所有失败的方法,请提供帮助。 如何解决此转换?

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 :(得分:1)

只需强制转换为pageIndex = 0; pageSize = 2; // you can configure this, if for example you need top 10 bookRepository.findBooks(new PageRequest(pageIndex, pageSize, Sort.Direction.DESC, "book.idb");

byte

根据规格

12.15 Conditional operator

  

... b形式的条件表达式? x:y首先评估   条件b   ...

     

?:运算符的第二和第三操作数x和y控制   条件表达式的类型。

     
      
  • 如果x的类型为X,y的类型为Y,

         
        
    • 如果X和Y是相同类型,则这是条件表达式的类型。
    •   
    • 否则,如果存在从X到Y的隐式转换(第11.2节),但不存在从Y到X的隐式转换,则Y是条件表达式的类型。
    •   
    • 否则,如果存在从X到Y的隐式枚举转换(第11.2.4节),则Y是条件表达式的类型。
    •   
    • 否则,如果存在从Y到X的隐式枚举转换(第11.2.4节),则X是条件表达式的类型。
    •   
    • 否则,如果存在从Y到X的隐式转换(§11.2),而不是从X到Y ,则 X是条件表达式的类型
    •   
    • 否则,将无法确定表达式类型,并且会发生编译时错误。
    •   
  •   
  • 如果x和y中只有一个具有类型,并且x和y都可以隐式转换为该类型,那么这就是条件类型   表达。
  •   
  • 否则,将无法确定表达式类型,并且会发生编译时错误。
  •   

给予

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));

示例

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。计算机说不...至少您需要在某个地方投射

答案 1 :(得分:1)

如果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));