当我们需要在C#中表示一个可以为null的值时,可空类型(Nullable Types)是非常有用的,它允许我们将值类型(Value Types)赋予null的能力。
定义可空类型
C#中的可空类型是由该类型名称和一个问号(?)组成的,例如:
int? num = null;
double? price = 3.99;
以上代码中,int?
类型表示一个可以为null的整数,double?
类型表示一个可以为null的浮点数。默认情况下,值类型变量不能为null,设置为null似乎没有意义,但由于可空类型的介入,我们现在可以像引用类型一样,使用null表示变量未赋值的状态。
操作可空类型
因为可空类型是一个结构体(Struct),因此它具有值类型的所有特性。不过,我们还需要注意一些额外的细节。
1. 判断可空类型是否为null
与引用类型不同的是,可空类型可以直接与null进行比较:
int? num = null;
if(num == null)
{
Console.WriteLine("num is null.");
}
else
{
Console.WriteLine("num is {0}.", num.Value);
}
在上面的示例中,num.Value
是获取可空类型实际存储的值的方法,如果可空类型的值为null,则会抛出异常。因此,在使用可空类型之前,一定要先判断其是否为null。
2. 获取可空类型的值
如果我们确信可空类型的值不为null,还可以使用GetValueOrDefault()
方法获取其值,这是一个很方便的方法,因为不需要再进行null值判断了。
int? num = 10;
int sum = num.GetValueOrDefault() + 5;
Console.WriteLine("sum is {0}.", sum);
在上面的示例中,我们将num
的值设为10,当我们调用GetValueOrDefault()
方法时,它会返回该值。因此,sum
的值为15。
示例说明
例子1:可空类型在数据库操作中的使用
在访问数据库时,许多列可以是null,而不是具体的值。在这种情况下,可空类型很有用。
using System.Data.SqlClient;
SqlConnection connection = new SqlConnection("Connection String Of Database");
SqlCommand command = new SqlCommand("select name, age from person", connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
string name = reader.GetString(0);
int? age = reader.IsDBNull(1) ? null : (int?)reader.GetInt32(1);
Console.WriteLine("name: {0}, age: {1}", name, age.HasValue ? age.ToString() : "null");
}
在这个示例中,我们使用了SqlDataReader
,该对象从数据库中获取数据。第二列“age”可以为空,因此我们使用了可空类型来存储该值。如果值为null,则表明该人员没有任何年龄数据。
例子2:可空类型在算术运算中的使用
在进行算术运算时,有时候需要使用可空类型,因为极有可能会遇到null值。
int? a = 5;
int? b = null;
int? c = a + b;
Console.WriteLine("result is {0}.", c.HasValue ? c.ToString() : "null");
在这个例子中,我们尝试将一个可空整数类型与null相加。由于c#不允许我们这样做,在这种情况下,c的值将是null。我们可以使用HasValue
属性来判断c的值是否为null。
以上便是关于C#中可空类型的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中可空类型的使用 - Python技术站