无法确定表达式的类型,因为<null>和int之间没有隐式转换
来源:互联网 发布:linux内核开发流程 编辑:程序博客网 时间:2024/05/01 03:02
遇到过好多次的问题了,因为一直忙着码代码,所以没时间去彻底的研究这个问题。
今天实在烦了,就想想了这个问题
下面是代码。
首先是一个实体类,有个 WinningType 字段类型是 int? 的可为空类型
public class Capital { /// <summary> /// key /// </summary> public int SeqId { get; set; } /// <summary> /// 微信Id /// </summary> public int WechatId { get; set; } /// <summary> /// openId /// </summary> public string OpenId { get; set; } /// <summary> /// 获奖类型 /// </summary> public int? WinningType { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 姓名 /// </summary> public string Mobile { get; set; } /// <summary> /// 省份 /// </summary> public string Province { get; set; } /// <summary> /// 城市 /// </summary> public string City { get; set; } /// <summary> /// 经销商 /// </summary> public string Distributor { get; set; } /// <summary> /// 创建时间 /// </summary> public string CreateTime { get; set; } }
然后我数据库中判断为null的时候之前一直都是这么转换的。
WinningType = r["lottery_type"] == DBNull.Value? null : Convert.ToInt32(r["lottery_type"])
这时候就会报错,为什么呢?最直观的原因就是我们定义的int?可为空类型,而如果这时候数据库有值的话,Convert转换的是int付给了int?的字段。这时候当然会报错了。因为类型根本就是不一样的。
这时候把代码改一下。
WinningType = r["lottery_type"] == DBNull.Value? null : (int?)(r["lottery_type"])
三元运算符的逻辑就变成了如果有值的话,那就强转换为int?类型,可空我们定义的相符合,没有值的话就直接赋值为nullok。编译通过。
其他的 double? long?都是同样的问题
其实本来是一个非常简单的面向对象问题,但是因为代码写多了之后这些细节问题都不太注意了。
扩展一点,C#的可为空类型其实就是对应的java的Integer,都是可以直接赋值null给相应的类型,那么反过来就是说int?是引用类型了,我们都知道的是引用类型都是赋值的栈中的一块地址。而我们直接赋值了一个int值当然是会报错的。
写下来,提醒一下自己。
0 0
- 无法确定条件表达式的类型,因为“<null>”和“int”之间没有隐式转换
- 无法确定表达式的类型,因为<null>和int之间没有隐式转换
- int型和char型之间的类型转换
- java中int类型和byte[]数组之间的转换
- 关于String、Int和Object类型之间的转换
- string与int和char之间的类型转换问题
- int和char数组之间类型转换
- 类型TCHAR、int、CString之间的转换
- String 与 int之间的类型转换
- c# 三元表达式 无法确定条件表达式的类型
- 枚举类型与int类型和string类型之间的转换
- C# int类型显示和隐式转换的比较
- 无法将类型"int"隐式转换为"string"
- C++ int unsigned int之间的隐式转换
- C++中单个数字的int类型和char类型之间的相互转换
- [js] js中string类型和int类型之间的转换
- java中关于String类型和double,int类型之间的转换
- java中int类型 和string类型之间的相互转换
- cocos2dx的UI
- html的笔记(列表)
- Wiki小记(二):Dokuwiki主题和插件推荐
- 不加<!DOCTYPE html>页面也显示,加不加的区别
- 最长上升子列
- 无法确定表达式的类型,因为<null>和int之间没有隐式转换
- 学习jquery小测试 自娱自乐
- null和""的区别详解
- 【第四章】 资源 之 4.3 访问Resource ——跟我学spring3
- 信号量的初始值
- linux驱动中的等待队列头
- UVa - 156 Ananagrams(STL)
- 关于Ping和Tracert命令原理详解
- 1-2 Fibonacci sequence