【发布时间】:2011-09-17 03:50:01
【问题描述】:
我对以下几点有点困惑:
- 空
- DBNull.Value
- ""
当我在赋值时使用条件语句 OR 时,我对这些事情有点困惑。有时它会抛出错误,有时它会起作用。我想知道我什么时候想使用上面的东西。它们是特定于数据类型的吗?我需要你的宝贵建议。
【问题讨论】:
标签: c# asp.net visual-studio-2008 types
我对以下几点有点困惑:
当我在赋值时使用条件语句 OR 时,我对这些事情有点困惑。有时它会抛出错误,有时它会起作用。我想知道我什么时候想使用上面的东西。它们是特定于数据类型的吗?我需要你的宝贵建议。
【问题讨论】:
标签: c# asp.net visual-studio-2008 types
null 适用于 C# null 值。
System.DBNull.value 适用于数据库特定的 NULL 值。
当您使用 ExecuteScalar() 时,如果未找到或返回列,则返回 null,但找到列且值为 null 则返回 DBnull,表示如果值为 null,则在列中,如果返回 DBnull 不为 null。
【讨论】:
null 是语言内部的,仅表示对象引用当前不引用实际对象。基本上,值类型(int、bool 等)和引用类型(Object、任何类等)之间的关键区别在于,值类型是内存中的具体值,而引用类型是指向对象表示的指针在记忆中。该指针有时可以指向,嗯,什么都没有。在这种情况下,它是null。它基本上意味着“这里不存在 C# 对象。”
DBNull.Value 在处理数据库方面略有不同。一个数据库列可以包含一个null 值。但是,当该数据被选择到代码中的对象(例如DataTable)中时,就代码而言, 有一个对象可供引用。但是,该对象包含数据库中 null 值的表示形式。因此,DBNull.Value 的存在代表了这种区别。它基本上意味着“这里有一个 C# 对象,它从数据库中获取了一个值,但该值是 null。”
"" (或string.Empty,如果您想为此使用内置常量)是一个有效值。它存在,它不是null,它在各方面都是string。它只是没有任何字符。一个有用的检查工具是string.IsNullOrEmpty(),它检查null 或空字符串。
【讨论】:
"" 和 string.Empty 之间的区别
null 是以下两种情况之一:
0 作为引用)Nullable<T> 结构,当前没有值(HasValue 属性也将返回false)DBNull 特定于 ADO.NET 的某些部分,以在数据库中表示 null。我还没有想到他们为什么不在这里使用常规的null 的充分理由。
"" 是长度为零的字符串文字 - 一个完全有效但为空的字符串。这样做的意义在于,在null 字符串和"" 字符串之间,value.Trim() 这样的实例方法的行为会有所不同; null.Trim() 会抛出异常; "".Trim() 就是 ""。一般来说,使用string.IsNullOrEmpty(value) 作为测试可以消除这种区别。
【讨论】:
param.Value = value ?? DBNull.Value; 等