三目运算符与if。

倾斜的水瓶座 2010-12-25 11:40:52
前段时间,在论坛上看到一个帖子,说的是三目运算的效率要大于if else。。当时我也有这样的想法,既然三目运算符效率比if else好,那么要if else干嘛?就在昨天,终于碰到了这样的问题。

数据库中AddTime是smalldatetime类型,创建实体类的时候,将AddTime设置成了string类型。在应用中,AddTime需要在特定的时候置成NULL,这时,问题就来了。当时将model.AddTime=null;编译的时候报错,然后设置model.AddTime="",编译的时候报错说DateTime类型不正确,最后,设置model.AddTime = string.Empty;修改更新数据库代码时这样写了下:

parameters[1].Value = string.IsNullOrEmpty(model.AddTime) ? DBNull.Value : model.AddTime;

编译的时候报错,说DBNull.Value : model.AddTime无法隐式转换,我当时就疯了,无奈之下,使用了if else


if (string.IsNullOrEmpty(model.AddTime))
{
parameters[2].Value = DBNull.Value;
}
else
{
parameters[2].Value = model.AddTime;
}


这样,问题才得以解决。所以才明白一点,存在即合理。确实是这样。。
刚开始写.NET不久,所以这也算是一些低级错误吧。有更合理的方法,请大家帮我下,在此谢谢大家了
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
倾斜的水瓶座 2010-12-25
  • 打赏
  • 举报
回复
不是实体类的赋值,而是SqlParameter 参数化时候的错误。。楼上的答案,给我很大启示哦。。。谢谢啦
wuyq11 2010-12-25
  • 打赏
  • 举报
回复
model.AddTime= rdr.IsDBNull(AddTime) ? null : (DateTime?)rdr.GetDateTime(AddTime);


laowang134 2010-12-25
  • 打赏
  • 举报
回复
三目运算符返回的结果不要求是一样的数据类型吧。。
wuyq11 2010-12-25
  • 打赏
  • 举报
回复
设置model.AddTime为空类型nullable
begintransaction 2010-12-25
  • 打赏
  • 举报
回复
好像是叫三元运算符吧...

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧