一.介绍
Nullable 是 C# 中的一个术语,它允许表单拥有一个额外的值 null。在本文中,我们将学习如何在 C# 中使用 Nullable 类型。
在 C# 中,我们有两种主要的数据类型:值和引用。我们不能直接将空值分配给值数据类型。在这种情况下,C# 2.0 为我们提供了可空类型,用于将值数据类型分配给空值。
二.什么是可空类型?
如上所述,Nullable 类型用于将空值分配给值数据类型。这意味着我们可以将空值直接分配给值数据类型的变量。我们可以使用 Nullable 声明空值,其中 T 是 int、float、bool 等类型。
可空类型在 C# 中扩展了基础数据类型的值域,使其不仅可以包含该数据类型的所有有效值,还可以包含一个额外的 null 值。这对于需要表示“缺失”或“未定义”值的场景非常有用。
例如,int 类型的值域是从 -2147483648 到 2147483647,而 int?(即 Nullable)可以包含所有这些值以及一个额外的 null 值。
三.如何声明可空类型
有两种方法可以声明可空类型。
Nullable<int> example;
或者
int? Example;
四.可空类型的属性
可空类型有两个属性:HasValue、Value。
HasValue
此属性根据 Nullable 变量是否有值返回一个 bool 值。如果变量有值,则返回 true;否则,如果变量没有值或为 null,则返回 false。
Nullable<int> a = null;
Console.WriteLine(a.HasValue); // 输出 False
Nullable<int> b = 9;
Console.WriteLine(b.HasValue); // 输出 True
Value
该属性给出 Nullable 类型变量的值。如果变量有值,则返回该值;否则,当变量值为 null 时,将抛出运行时 InvalidOperationException 异常。
Nullable<int> a = null;
Console.WriteLine(a.Value);//输出“InvalidOperationException”类型的运行时异常
Nullable b = 9;
Console.WriteLine(b.Value); //输出 9
五.可空类型的方法
GetValueOrDefault()
此方法如果值不为 null,则返回 Nullable 类型变量的实际赋值,如果变量值为 null,则给出该数据类型的默认值。以下是示例代码
Nullable<int> a = 9;
Console.WriteLine(a.GetValueOrDefault()); // 、输出 9
Nullable<int> a = null;
Console.WriteLine(a.GetValueOrDefault()); //输出 0
六.使用可空类型的规则
要将 Nullable 类型用作局部变量,应先声明它,并且初始化,否则会出现编译时错误。此规则与值数据类型类似。
int? b;
Console.WriteLine(b.Value); //编译出错提示'use of unassigned local variable b'
如果 Nullable 变量是类中的一个属性,之后,如果我们访问该 Nullable 变量,则不会出现任何错误,因为在类变量中,它会自动声明为 null。
class Test
{
public int? B;
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Test().B); //不会编译出错
}
}
七.空合并运算符(??)
我们不能直接将可空类型变量的值赋给非可空类型变量。如下例所示,如果我们尝试赋值,将会出现编译时错误。
int? a = 10;
int b = a;//编译出错提示`Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)`
注意。我们可以将比较运算符 == 和 != 运算符与可空类型变量和非可空类型变量一起使用。
对于可空变量,我们可以使用空合并运算符 (??) 来检查变量值是否为空。然后,我们可以根据该值分配非可空类型变量值。当我们在运行时不确定该可空变量的值是否根据我们的逻辑更改时,可以使用此运算符。以下是一个例子
int? a=null;
int b=a?? 10;
Console.WriteLine(b); // 输出 10
在上面的例子中,如果变量 a 的值为 null,则会将值 10 赋给变量 b。在这种情况下,b 被赋值为 10,打印的值也将是 10。
结论
在本文中,我们讨论了 Nullable 类型及其属性和方法。使用 Nullable 类型的主要优点是,我们可以使用此类型将 Null 值存储在数据库的列中。