在 C# 中,可以为 null 的类型是引入的一项功能,用于允许值类型(如 int、double、bool 等)除了其正常值范围外,还具有 null 值。这在需要表示值的缺失或值可能合法地未定义的情况下特别有用。
C# 中可以为 null 的类型
您可以在 C# 2.0 中为数据类型(double、char、int、bool)声明并赋值,也可以为 vairable 声明并赋值。
double? pi = 3.14;
char? letter = 'a';
int m2 = 10;
int? m = m2;
bool? flag = null;
// An array of a nullable value type:
int? [] arr = new int?[10];
您可以使用 is 运算符来检查数据类型的 vairable 是否为 null,并退出上述类型的值。
int? a = 42;
if (a is int valueOfA)
{
Console.WriteLine($"a = {valueOfA}");
}
else
{
Console.WriteLine("a does not have a value");
}
// Output:
// a = 42
您可以使用 HasValue 属性检查上述数据类型的 vairable 是否具有 null 值。
int? b = 10;
if (b.HasValue)
{
Console.WriteLine($"b = {b.Value}");
}
else
{
Console.WriteLine("b does not have a value");
}
// Output:
// b = 10
还可以使用 HasValue 属性来检查可以为 null 的值类型的变量,并使用 Null。
int? c = 7;
if (c != null)
{
Console.WriteLine($"c = {c.Value}");
}
else
{
Console.WriteLine("c does not have a value");
}
// Output:
// c = 7
您可以使用 Coalescing Operator 检查任一值是否为 null(如果为 null),然后分配一个值。
int? a = 28;
int b = a ?? -1;
Console.WriteLine($"b = {b}"); // output: b = 28
int? c = null;
int d = c ?? -1;
Console.WriteLine($"d = {d}"); // output: d = -1
值类型 T 支持的预定义一元运算符和二元运算符或任何重载运算符也受相应的可为 null 值类型 T?
int? a = 10;
int? b = null;
int? c = 10;
a++; // a = 11
a = a * c; // a = 110
a = a + b; // a = null
可以为 null 的值类型 T 的实例?装箱方式如下:
int a = 41;
object aBoxed = a;
int? aNullable = (int?)aBoxed;
Console.WriteLine($"Value of aNullable: {aNullable}");
object aNullableBoxed = aNullable;
if (aNullableBoxed is int valueOfA)
{
Console.WriteLine($"aNullableBoxed boxed: {valueOfA}");
}
// Output:
// Value of aNullable: 41
// aNullableBoxed boxed: 41
is 运算符用于检查对象是否与给定类型兼容。如果对象属于指定类型或可以强制转换为该类型,则返回 true;否则,它将返回 false。
object fruitName = "Apricot";
if (obj is string)
{
Console.WriteLine("A Fruit Apricot.");
}
C# 中的可为 null 类型提供了一种简单的方法来处理值可能不存在或未定义的情况,而无需采用表达性较差的解决方法。它们广泛用于各种应用程序,特别是在数据库交互和需要值可选性的场景中。