我应该用啥来比较 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()的主要内容,如果未能解决你的问题,请参考以下文章