我应该用啥来比较 DBNull ?使用 DBNull.Value 或 ToString().IsNullOrEmpty()

Posted

技术标签:

【中文标题】我应该用啥来比较 DBNull ?使用 DBNull.Value 或 ToString().IsNullOrEmpty()【英文标题】:What should I use to compare DBNull ? Using DBNull.Value or ToString().IsNullOrEmpty()我应该用什么来比较 DBNull ?使用 DBNull.Value 或 ToString().IsNullOrEmpty() 【发布时间】:2011-03-24 13:33:14 【问题描述】:

我可以使用任何方法检查数据行上的DBnull

通过使用

if(dr[0][0]==DBNull.Value)
//do somethin

或通过做

if(dr[0][0].ToString().IsNullOrEmpty())
//do something

在这两种情况下,我都会得到相同的结果。

但是哪一个是concptually正确的方法。哪个会使用更少的资源

【问题讨论】:

.ToString().IsNullOrEmpty()?数据 row 是否有 2 个索引 dr[0][0]?如果dr[0][0] 为空怎么办,你不能调用.ToString()。通常最好提供工作代码以获得更好的答案。 @Kobi:我的错你是对的,我的意思是如果使用两个索引器,我的意思是 DataTable 对于第二种情况,如果该列中的值为 null,您将收到错误 【参考方案1】:

第一种方式有些正确。 然而,更被接受的方式是:

if ( dr[0][0] is DBNull )

而第二种方式肯定是不正确的。如果你使用第二种方式,你会在两种情况下得到 true:

    您的值为 DBNull 你的值是一个空字符串

【讨论】:

【参考方案2】:

从概念上讲,与DBNull.Value 的比较是正确的。

你也可以使用:

if (Convert.IsDBNull(dr[0]))


你也可以使用,我不喜欢,纯粹是因为它是类型比较而不是值比较:

if (dr[0] is DBNull)


【讨论】:

【参考方案3】:

总是使用:

dr[0].IsNull(0) 

假设这个函数的创建者知道比较的最佳方式/最有效的方式..

【讨论】:

【参考方案4】:

最简单的方法

if (dr[0][0] == DBNull.Value)
//do somethin

完全有效且可读。

即使 == 比较引用,它也可以在这里工作,因为 DBNUll.Value is the only instance of DBNull class - 所以所有 DBNull 值实际上都是这个精确的引用。

【讨论】:

以上是关于我应该用啥来比较 DBNull ?使用 DBNull.Value 或 ToString().IsNullOrEmpty()的主要内容,如果未能解决你的问题,请参考以下文章

我应该用啥来构建我的 Angular 2 项目?

在android中每隔几分钟我应该用啥来读取json?

用啥来替换python中的接口/协议

在我的 Qt 应用程序中,我可以用啥来代替 sleep 和 usleep?

如果我不能使用 WebRTC,我现在可以用啥来直播视频

spring3应该用啥来实现时间触发器,原来的ScheduledTimerTask 在spring3里已过时。