当我们必须在C#.Net中使用DBNull.Value,null和""时?

the*_*van 10 c# asp.net types visual-studio-2008

我对以下事情有点困惑:

  1. 空值
  2. DBNull.Value
  3. ""

当我使用条件语句或在分配值,我用这些东西有点困惑.有时它会抛出错误,有时它会起作用.我想知道什么时候我想用上面的东西.它们是否特定于数据类型?我需要你宝贵的建议.

Mar*_*ell 14

null 是两件事之一:

  • 一个实际上并不指向对象的引用- 只是一个"无"指示符(实际上,它是0作为引用的值)
  • 一个Nullable<T>结构,当前没有值(该HasValue属性也将返回false)

DBNull特定于ADO.NET的某些部分null在数据库中表示.我还没有想到为什么他们不仅仅null在这里使用常规的一个很好的理由.

""是一个长度为零的字符串文字 - 一个完全有效但空的字符串.这意味着在null字符串和""字符串之间,实例方法value.Trim()会表现得不同; null.Trim()会抛出异常; "".Trim()只是"".通常,使用string.IsNullOrEmpty(value)作为测试会使这种区别消失.


Dav*_*vid 12

  • null语言是内部的,只是意味着对象引用当前不引用实际对象.基本上,值类型(int,bool等)和引用类型(Object,任何类等)之间的关键区别在于值类型是内存中的具体值,引用类型是指向对象表示的指针在记忆中.那个指针有时可以指向,没什么.在哪种情况下null.它基本上意味着"这里没有C#对象."

  • DBNull.Value与使用数据库的目的略有不同.数据库列可以包含null值.然而,当数据被选择为对象(如DataTable在代码),存在一个对象那里只要代码而言引用.但是,该对象包含null数据库中值的表示.因此,DBNull.Value存在表示这种区别.它基本上意味着"这里有一个C#对象从数据库中获取了一个值,但该值是null."

  • ""(或者string.Empty如果你想使用内置常量)是一个有效的值.它存在,它不是null,它在各方面都是string.它只是没有任何字符.检查这个的有用工具是检查string.IsNullOrEmpty()其中一个null或空字符串.