我需要有关此转换的帮助。 我已经反编译了一个旧的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));
}
答案 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
根据规格
... 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));