我对以下事情感到有些困惑:
当我使用条件语句或在分配值时,我对这些事情有点困惑。有时它会抛出错误,有时它会起作用。我想知道什么时候我想用上面的东西。它们是否特定于数据类型?我需要你的宝贵建议。
答案 0 :(得分:14)
null
是以下两件事之一:
0
作为参考)Nullable<T>
结构,当前没有值(HasValue
属性也将返回false
) DBNull
特定于ADO.NET的某些部分,用于在数据库中表示null
。我还没有想到他们为什么不在这里使用常规null
的充分理由。
""
是一个长度为零的字符串文字 - 一个完全有效但空的字符串。这样做的重要性在于null
字符串和""
字符串之间,像value.Trim()
这样的实例方法的行为会有所不同; null.Trim()
将抛出异常; "".Trim()
只是""
。通常,使用string.IsNullOrEmpty(value)
作为测试会使这种区别消失。
答案 1 :(得分:12)
null
是语言的内部,只是意味着对象引用当前不引用实际对象。基本上,值类型(int,bool等)和引用类型(Object,任何类等)之间的关键区别在于值类型是内存中的具体值,引用类型是指向对象表示的指针在记忆中。那个指针有时可以指向,没什么。在这种情况下,它是null
。它基本上意味着“这里没有C#对象。”
DBNull.Value
与使用数据库略有不同。数据库列可以包含null
值。但是,当在代码中将该数据选择到对象(例如DataTable
)中时,是一个对象,就代码而言。但是,该对象包含数据库中null
值的表示。因此,存在DBNull.Value
来表示这种区别。它基本上意味着“这里有一个C#对象从数据库中获取一个值,但该值为null
。”
“”(如果您想使用内置常量,则为string.Empty
)是有效值。它存在,它不是null
,它在各个方面都是string
。它只是没有任何字符。检查此问题的有用工具是string.IsNullOrEmpty()
,它会检查null
或空字符串。
答案 2 :(得分:1)
null适用于C#空值。
System.DBNull.value适用于特定于数据库的NULL值。
当你使用ExecuteScalar()时,如果没有找到或返回列,它会给出null,但是找到列并且value为null然后它返回DBnull,如果value为null则表示在列中,if将返回DBnull而不是null。 / p>