C#2.0中的可空类型
1、可空类型是 System.Nullable 结构的实例,可见是值类型。无法创建基于引用类型的可空类型。(引用类型已支持 null 值)。
2、可空类型表示:基础值类型正常范围内的值+null,Nullable<bool>Nullable<bool> 可以被赋值为 true 或 false或 null。
3、定义:T?和System.Nullable<T>此处的 T 为值类型。
4、为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10;
5、使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;
。如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础 类型所赋的值或默认值,例如 int j = x.GetValueOrDefault()(为null时候返回默认值,否则返回当前值)。
6.HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value。
示例:
1
using System;
2
using System.Collections.Generic;
3
4
class NullableBasics
5

{
6
static void DisplayValue(int? num)
7
{
8
if (num.HasValue == true)
9
{
10
Console.WriteLine("num = " + num);
11
}
12
else
13
{
14
Console.WriteLine("num = null");
15
}
16
17
// 如果 num.HasValue 为 false,则 num.Value 引发 InvalidOperationException
18
try
19
{
20
Console.WriteLine("value = {0}", num.Value);
21
}
22
catch (InvalidOperationException e)
23
{
24
Console.WriteLine(e.Message);
25
}
26
}
27
28
static void Main()
29
{
30
DisplayValue(1);
31
DisplayValue(null);
32
Console.Read();
33
34
}
35
}
结果:
num = 1
value = 1
num = null
可为空的对象必须具有一个值。
示例:??运算符
1
using System;
2
3
class NullableOperator
4

{
5
static int? GetNullableInt()
6
{
7
return null;
8
}
9
10
static string GetStringValue()
11
{
12
return null;
13
}
14
15
static void Main()
16
{
17
// ?? 运算符示例。
18
int? x = null;
19
20
// y = x,只有当 x 为 null 时,y = -1。
21
int y = x ?? -1;
22
Console.WriteLine("y == " + y);
23
24
// 将方法的返回值赋给 i,
25
// 仅当返回值为 null 时,
26
// 将默认的 int 值赋给 i。
27
int i = GetNullableInt() ?? default(int);
28
Console.WriteLine("i == " + i);
29
30
// ?? 也适用于引用类型。
31
string s = GetStringValue();
32
// 显示 s 的内容,仅当 s 为 null 时,
33
// 显示“未指定”。
34
Console.WriteLine("s = {0}", s ?? "null");
35
Console.Read();
36
}
37
}
38
结果:
y == -1
i == 0
s = null