if-else与value==""?"":""之间的区别

xugan666 2011-08-02 01:54:49
今天敲代码的时候,发现了一个小细节。。就是


if (!string.IsNullOrEmpty(Time.Text.Trim()))
BasicInfo.Time= DateTime.Parse(Time.Text.Trim());
else
BasicInfo.Time= null;

------------------------------------这两种方法并不一样
CompanyBase.Time= Time.Text.Trim() == string.Empty ? null : Convert.ToDateTime(Time.Text.Trim())

CompanyBase.Time= Time.Text.Trim() == string.Empty ? DBNull.Value: Convert.ToDateTime(Time.Text.Trim())

上面一种方法可以达到null的赋值,下面的方法却达到不了。。。
会抛出一个ex。。

求解, 另 time再实体类里面都是 可空类型···
...全文
119 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xugan666 2011-08-02
  • 打赏
  • 举报
回复
现在我发现了一下,还是类型问题,强类型和弱类型的问题。 强类型对数据进行操作的时候就要赋值。string弱类型的话,null就是null···
xugan666 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 shinnakoruru 的回复:]
异常是什么?
以上那句我只看出有一个地方有可能异常
Time.Text.Trim()
如果Time.Text是null那么就会出现空引用。
但如果Time是个控件,应该不会出现Time.Text为null

你最好把上下文发出来
[/Quote]

这个就是上下文·
time就是textbox。我简略了而已
xugan666 2011-08-02
  • 打赏
  • 举报
回复
等下结贴。。
ShinNakoruru 2011-08-02
  • 打赏
  • 举报
回复
异常是什么?
以上那句我只看出有一个地方有可能异常
Time.Text.Trim()
如果Time.Text是null那么就会出现空引用。
但如果Time是个控件,应该不会出现Time.Text为null

你最好把上下文发出来

xugan666 2011-08-02
  • 打赏
  • 举报
回复
这个问题我刚刚解决了BasicInfo.Time= Time.Text.Trim() == string.Empty ? (DateTime?)null : Convert.ToDateTime(Time.Text.Trim());、

由于实体是引用类型,所以这里赋值之后,再数层那里还要判断一下。
if (Entity.EmplyeeHappyDay != null)
parameters[0].Time= Entity.Time;
else
parameters[0].Time= DBNull.Value;

然后实体层那里一定要? 这里就ok了。。
kyoblog 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shinnakoruru 的回复:]

楼主理解有误。
第二种方法你少了一个类型转换
应该写做:
C# code

CompanyBase.Time= string.IsNullOrEmpty(Time.Text.Trim()) ? (DateTime?)null : Convert.ToDateTime(Time.Text.Trim())
[/Quote]
xugan666 2011-08-02
  • 打赏
  • 举报
回复

BasicInfo.Time= Time.Text.Trim() == string.Empty ? (DateTime?)null : Convert.ToDateTime(Time.Text.Trim()); 这样写也会跑出异常,不行
ShinNakoruru 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dongxinxi 的回复:]
差别就是当你的CompanyBase.Time为null的时候,上面会给到null
下面的改一下

CompanyBase.Time= string.IsNullOrEmpty(Time.Text) ? null : Convert.ToDateTime(Time.Text.Trim());
[/Quote]

如果Time.Text为null,楼主的第一种方法也是异常的,他调用了Time.Text.Trim()
ShinNakoruru 2011-08-02
  • 打赏
  • 举报
回复
插入数据库的时候,如果要用null,要求你的数据表定义中该字段必须可为空。
xugan666 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weslonlovejall 的回复:]
意思就是Datetime? aa 这样声明类型可以赋NULL值了,但是不能赋''这样的空值了,不然在数据库中有一条1900-01-01的默认数据。
[/Quote]

你试试。再实体里面加个? 然后用
CompanyBase.Time= Time.Text.Trim() == string.Empty ? null : Convert.ToDateTime(Time.Text.Trim())
这方法赋值,看可否成功。。。
  • 打赏
  • 举报
回复
差别就是当你的CompanyBase.Time为null的时候,上面会给到null
下面的改一下

CompanyBase.Time= string.IsNullOrEmpty(Time.Text) ? null : Convert.ToDateTime(Time.Text.Trim());


ShinNakoruru 2011-08-02
  • 打赏
  • 举报
回复
楼主理解有误。
第二种方法你少了一个类型转换
应该写做:

CompanyBase.Time= string.IsNullOrEmpty(Time.Text.Trim()) ? (DateTime?)null : Convert.ToDateTime(Time.Text.Trim())
xugan666 2011-08-02
  • 打赏
  • 举报
回复
最后发现,插入数据库的时候,null。DBNull.Value 也不行。
风之雨 2011-08-02
  • 打赏
  • 举报
回复
意思就是Datetime? aa 这样声明类型可以赋NULL值了,但是不能赋''这样的空值了,不然在数据库中有一条1900-01-01的默认数据。
xugan666 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kathylxb 的回复:]
value=bool? "":""
冒号前后的值必须类型一致,很明显,在你的if...else中,if后面的是DateTime,不可为空的
而else后面的是DateTiem? ,是可以为空的.
[/Quote]

1楼,我不知你回答的是什么意思。。
kathylxb 2011-08-02
  • 打赏
  • 举报
回复
value=bool? "":""
冒号前后的值必须类型一致,很明显,在你的if...else中,if后面的是DateTime,不可为空的
而else后面的是DateTiem? ,是可以为空的.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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