首页 新闻 赞助 找找看

c# 泛型类型转换?

0
悬赏园豆:5 [已解决问题] 解决于 2012-09-27 00:14


public T QueryValue<T>()
{
T result = default(T);
_cmd.CreateCommand();
var o = _cmd._SqlCommand.ExecuteScalar();
_cmd.Clear();
result= (T)o ;
return result;

}

我的数据库返回值是 5555 ,报错  (T)o 说这个转化无效,好像是int类型的就出错,为什么不可以啊?

夜星冷的主页 夜星冷 | 初学一级 | 园豆:71
提问于:2012-09-26 16:48
< >
分享
最佳答案
3

result= (T)o ;

修改为

result = (T)Convert.ChangeType(o,typeof(T));

收获园豆:5
I,Robot | 大侠五级 |园豆:9783 | 2012-09-26 21:11

漂亮

魔令师 | 园豆:200 (初学一级) | 2016-06-15 09:41

当T为byte时貌似结果不对

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-07 16:06
其他回答(3)
-1

因为编译器不知道 T 是 int 类型,所以转换无效。

简单的方法:result = (T)(object)o;

Launcher | 园豆:45045 (高人七级) | 2012-09-26 17:20

ExecuteScalar(); 本来就是返回的是 object 类型,你这个根本就解决问题吗

支持(0) 反对(0) 夜星冷 | 园豆:71 (初学一级) | 2012-09-26 17:23

@夜星冷: 看错了,以为 ExecuteScalar 的返回类型是 int 。你这样,在调试的时候设个断点,通过 o.GetType(),看下它的类型是什么。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-09-26 17:30
0

你确定返回的是 5555,是int类型

5555 确定是 第一行 第一列

Qlin | 园豆:2403 (老鸟四级) | 2012-09-26 17:32
0

这个涉及到泛型的逆变和协变

Tracine0513 | 园豆:113 (初学一级) | 2016-07-19 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册