所以在C#中每当我从MSSQL数据库中检索一个tinyint时,我就使用了以下转换.
(int)(byte)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)
但是,这个演员似乎在MySQL中不起作用.
我试过了什么
(byte)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)
只是
(int)reader["MyField"];
Run Code Online (Sandbox Code Playgroud)
编辑1
例外
The specified cast is not valid.
Run Code Online (Sandbox Code Playgroud)
编辑2
这是数据类型.
{Name = "SByte" FullName = "System.SByte"}
Run Code Online (Sandbox Code Playgroud)
usr*_*usr 10
要确定正确的类型,请查看值
reader["MyField"].GetType()
Run Code Online (Sandbox Code Playgroud)
在调试器中.
小智 8
问题是由于转换和显式运算符:
(byte)objectExpression是不一样的(byte)sbyteExpression.
第一个是[直接] 强制转换失败,因为真实对象类型是sbyte和不是byte.后者将进行转换,只是碰巧使用一个明确的运营商(即"显式转换")的语法,不幸的是,仍然看上去像一个[直接] 投如同上面.这是一个失败sans-database的例子:
var obj = (object)(sbyte)0;
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int
var i2 = (int)obj; // fail: sbyte (cast)-> int (but sbyte is not int!)
Run Code Online (Sandbox Code Playgroud)
无论是使用(sbyte)objectExpression投有效期为真正的对象类型,或者Convert.ToInt32(objectExpression)它接受一个object和做一些魔法转换它为int.(使用Convert.ToByte可能会在溢出时抛出异常.)
快乐的编码!
| 归档时间: |
|
| 查看次数: |
8583 次 |
| 最近记录: |