详解C#可空类型(Nullable)
可空类型介绍
C#中引入了可空类型(Nullable Type)的概念,允许值类型(Value Type)中存储null值。在值类型中,如果未给该变量赋值,则该变量的值默认为0,但是如果该变量的值也可以是null,则使用可空类型来定义该变量。
可空类型可用于任何基本类型,如int,float,decimal等。
如何定义可空类型
定义一个可空类型时,在值类型后面加一个问号(?)即可。例如:
int? nullableInt = null;
float? nullableFloat = 3.14f;
在上面的示例中,nullableInt
被定义为一个可空的int类型,它的值为null;nullableFloat
被定义为一个可空的float类型,它的值为3.14。
可空类型的操作
在可空类型中,标准类型中支持的操作也是支持的,比如运算符、赋值、转换等等。比如:
int? nullableInt = null;
int nonNullableInt = 10;
// 如果值为null,则返回默认值0
int defaultInt = nullableInt ?? 0;
// 如果值为null,则返回-1
int valueOrDefault = nullableInt.GetValueOrDefault(-1);
// 可空类型与非可空类型之间的赋值
nonNullableInt = nullableInt.GetValueOrDefault();
可空类型的比较
在比较两个可空类型时,需要使用Nullable.Compare
方法进行比较,该方法返回一个整数。
int? nullableInt1 = 10;
int? nullableInt2 = null;
// 比较两个可空类型的值大小
int cmp1 = Nullable.Compare(nullableInt1, nullableInt2); // cmp1 = 1,nullableInt1比nullableInt2大
// 另一种比较方式
int cmp2 = nullableInt1.CompareTo(nullableInt2); // cmp2 = 1,nullableInt1比nullableInt2大
示例一:显示从可空类型获取值
在下面的示例中,我们展示了如何从可空类型的变量中获取值,并且当值为null时,给它一个默认值。
using System;
class Program
{
static void Main(string[] args)
{
int? nullableInt1 = null;
int? nullableInt2 = 3;
int value1 = GetValueOrDefault(nullableInt1, -1); // value1为-1
int value2 = GetValueOrDefault(nullableInt2, -1); // value2为3
Console.WriteLine(value1);
Console.WriteLine(value2);
}
// 从一个可空类型的变量中获取值,如果为null,则返回默认值
static int GetValueOrDefault(int? nullableInt, int defaultValue)
{
if (nullableInt.HasValue)
{
return nullableInt.Value;
}
else
{
return defaultValue;
}
}
}
在上面的示例中,我们定义了一个GetValueOrDefault
方法,用于从一个可空类型的变量中获取值。如果这个值为null,则返回给定的默认值。然后我们分别给nullableInt1
和nullableInt2
赋值,并且分别调用GetValueOrDefault
方法,打印出返回的值。
示例二:使用可空类型比较两个日期
在下面的示例中,我们展示了如何使用可空类型比较两个日期。
using System;
class Program
{
static void Main(string[] args)
{
DateTime? date1 = new DateTime(2000, 1, 1);
DateTime? date2 = new DateTime(1999, 12, 31);
Console.WriteLine(CompareDates(date1, date2)); // 1,date1大于date2
}
// 比较两个日期,如果两个值都为null,则返回0;如果其中一个为null,则返回-1
static int CompareDates(DateTime? date1, DateTime? date2)
{
if (date1.HasValue && date2.HasValue)
{
return DateTime.Compare(date1.Value, date2.Value);
}
else if (date1.HasValue && !date2.HasValue)
{
return 1;
}
else if (!date1.HasValue && date2.HasValue)
{
return -1;
}
else
{
return 0;
}
}
}
在上面的示例中,我们定义了CompareDates
方法用于比较两个日期。该方法使用DateTime.Compare
方法比较两个日期的大小,如果两个值都为null,则返回0;如果其中一个为null,则返回-1。我们分别给date1
和date2
赋值,并且调用CompareDates
方法,打印出比较结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解c# 可空类型(Nullable) - Python技术站