(1) NULL
null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的。C#允许使用==或!=来判断是否为NULL,例如:if(dataGridView2.CurrentRow != null) ...。
(2) DBNULL
DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.,DBNull唯一作用是可以表示数据库中的字符串,数字,或日期,为什么可以表示原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值 。 要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。DBNull 实现了 IConvertible 。但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。
判断DBNULL的方法:
1、用OleDbDataReader.isDBNull()方法,()内是列序号
2、因为上面方法需要知道列序号,而很多时候我们只知道列名,那么干脆用OleDbDataReader[“列名”].toString() != ""来判断它的值不是空或者DBNull
3、用Convert.isDBNull(判断对象)方法进行判断,()内填写要判断的表达式
--------------------------------------------------------------------------------------------------------------------------
注:
1、另外,当一个变量(非引用变量)声明,但是未初始化时,该变量的默认值并非NULL,而为系统设置的默认值,如Bool型的默认值为FALSE。
bool isHere;
messgebox.show(isHere.tostring()); //尽管没有对isHere赋值,但仍可以使用其默认值,FALSE
2、如果需要使用可以使用null值的int、bool等类型型,可以使用int?、bool?类型。还可以将 == 和 != 操作数用于可为 null 的类型,如:if (x != null) y = x;
示例1:
1: int? y = 10;
2: if (y != null)
3: {
4: System.Console.WriteLine(y.Value);
5: }
6: else
7: {
8: System.Console.WriteLine("Undefined");
9: }
示例2:
一个根据bool?值设定comboBox控件的属性。CTIsFirstTime为ComboBox控件名。
1: public bool? IsFirstTime //允许该值为空
2: {
3: get
4: {
5: if (CTIsFirstTime.SelectedIndex == -1) //当comboBox什么都没选时,SelectedIndex值为-1
6: return null;
7: else
8: {
9: if (CTIsFirstTime.SelectedIndex == 0)
10: return true;
11: else
12: return false;
13: }
14: }
15: set
16: {
17: if (value == null)
18: CTIsFirstTime.SelectedIndex = -1;
19: else
20: {
21: if (value == true)
22: CTIsFirstTime.SelectedIndex = 0;
23: else
24: CTIsFirstTime.SelectedIndex = 1;
25: }
26: }
27: }