在C#中,编译器不允许您为变量分配空值。因此, C#2.0提供了一种特殊功能,可以为被称为Nullable类型的变量分配空值。 Nullable类型允许您为变量分配空值。 C#2.0中引入的可空类型只能与值类型一起使用,而不能与引用类型一起使用。
Reference Type的可空类型将在2019年的C#8.0中引入,以便我们可以显式定义引用类型是否可以容纳null值。这帮助我们在不使用条件的情况下解决了NullReferenceException的问题。在本文中,讨论围绕值类型的可空类型展开。
Nullable类型是System.Nullable
句法:
Nullable variable_name = null;
或者您也可以使用包含以下内容的快捷方式?数据类型的运算符。
datatype? variable_name = null;
例子:
// this will give compile time error
int j = null;
// Valid declaration
Nullable j = null;
// Valid declaration
int? j = null;
如何访问Nullable类型变量的值?
您不能直接访问Nullable类型的值。如果原始分配的值不为null,则必须使用GetValueOrDefault()方法来获取它。如果为空,则将获得默认值。 null的默认值为零。
例子:
C#
// C# program to illustrate Nullable Types
using System;
class Geeks {
// Main Method
static void Main(string[] args)
{
// defining Nullable type
Nullable n = null;
// using the method
// output will be 0 as default
// value of null is 0
Console.WriteLine(n.GetValueOrDefault());
// defining Nullable type
int? n1 = null;
// using the method
// output will be 0 as default
// value of null is 0
Console.WriteLine(n1.GetValueOrDefault());
// using Nullable type syntax
// to define non-nullable
int? n2 = 47;
// using the method
Console.WriteLine(n2.GetValueOrDefault());
// using Nullable type syntax
// to define non-nullable
Nullable n3 = 457;
// using the method
Console.WriteLine(n3.GetValueOrDefault());
}
}
C#
// C# program to illustrate the
// use of Nullable type
using System;
class GFG {
// Main Method
static public void Main()
{
// a is nullable type
// and contains null value
int ? a = null;
// b is nullable type int
// and behave as a normal int
int ? b = 2345;
// this will not print
// anything on console
Console.WriteLine(a);
// gives 2345 as output
Console.WriteLine(b);
}
}
C#
// C# program to illustrate the
// use of Nullable.Hasvalue
using System;
class GFG {
// Main Method
static void Main()
{
// a is nullable type
// and contains null value
Nullable a = null;
// check the value of object
Console.WriteLine(a.HasValue);
// b is nullable type
// and contains a value
Nullable b = 7;
// check the value of object
Console.WriteLine(b.HasValue);
}
}
C#
// C# program to illustrate the
// use of null-coalescing operator(??)
using System;
class GFG {
// Main Method
static public void Main()
{
// a is nullable type
// and contains null value
int ? a = null;
// it means if a is null
// then assign 3 to b
int b = a ?? 3;
// It will print 3
Console.WriteLine(b);
}
}
输出:
0
0
47
457
可空类型的特征
- 借助可为空的类型,您可以为变量分配一个空值,而无需基于引用类型创建可为空的类型。
- 在可为空的类型中,您还可以将值分配给可为空的类型。如下例所示。
例子:
C#
// C# program to illustrate the
// use of Nullable type
using System;
class GFG {
// Main Method
static public void Main()
{
// a is nullable type
// and contains null value
int ? a = null;
// b is nullable type int
// and behave as a normal int
int ? b = 2345;
// this will not print
// anything on console
Console.WriteLine(a);
// gives 2345 as output
Console.WriteLine(b);
}
}
输出:
2345
- 您可以使用Nullable.HasValue和Nullable.Value来检查该值。如果为对象分配了值,则它将返回“ True”,如果将对象分配为null,则将返回“ False”。如果该对象未分配任何值,则将给出编译时错误。
例子:
C#
// C# program to illustrate the
// use of Nullable.Hasvalue
using System;
class GFG {
// Main Method
static void Main()
{
// a is nullable type
// and contains null value
Nullable a = null;
// check the value of object
Console.WriteLine(a.HasValue);
// b is nullable type
// and contains a value
Nullable b = 7;
// check the value of object
Console.WriteLine(b.HasValue);
}
}
输出:
False
True
- 您也可以使用==和!可空类型的运算符。
- 如果可空类型的值为null,则也可以使用GetValueOrDefault(T)方法获取分配的值或提供的默认值。
- 您还可以使用空合并运算符(??)为源自可空类型的值的基础类型分配值。
例子:
C#
// C# program to illustrate the
// use of null-coalescing operator(??)
using System;
class GFG {
// Main Method
static public void Main()
{
// a is nullable type
// and contains null value
int ? a = null;
// it means if a is null
// then assign 3 to b
int b = a ?? 3;
// It will print 3
Console.WriteLine(b);
}
}
输出:
3
- 可空类型不支持嵌套的可空类型。
- 可空类型不支持var类型。如果将Nullable与var一起使用,则编译器将给您一个编译时错误。
可空类型的优点:
- 可空类型的主要用途是在数据库应用程序中。假设在表中的一列中需要空值,那么您可以使用可空类型输入空值。
- 可空类型对于表示未定义的值也很有用。
- 您还可以使用Nullable类型而不是引用类型来存储null值。