使非空类可为空

本文关键字: | 更新日期: 2023-09-27 17:56:34

可能的重复项:
日期时间"空"值

C# 中有许多内置类不可为 Null。例如,日期时间,有时我想检查我的数据时间对象是否为空,但我不允许。如何在日期时间类中插入可空性?

使非空类可为空

C# 中有许多内置类不可为 Null。

它们(Datetime)是值类型的结构,而不是类,因此不可为空。

MSDN - 值类型

与引用类型不同,值类型不能包含 null 值。 但是,可为空的类型功能确实允许值类型: 分配给空。

您可以将Nullable<T>DateTime一起使用以使其可为空。

DateTime? dateTimeObject = null;

DateTime ?的问号使其可为空。

语法 T? 是 Nullable 的简写,其中 T 是值类型。 这两种形式是可以互换的。

简而言之,结构是值类型。值类型必须始终有效(因此必须初始化结构构造函数中的所有成员)并且不能为 null。

然而,有一个作弊;

您可以使用 Nullable<T> ,否则可以将其用作"T?",以将值类型包装在可为空的引用中。

用法:

DateTime? foo = new DateTime(...);
foo.Value.<datetime member>

当然,您可以通过更改声明使整数、双精度、日期时间等可为空。

DateTime? dt = null.

您需要注意两件事。

1)日期时间?和日期时间不是相同的数据类型,因此,如果您执行以下操作:

DateTime? date1 = null;
date1 = DateTime.Now;
DateTime date2 = date1; // Wont work.

获取可为空类型的值的正确方法是这样的:

DateTime date2 = date1.Value;

2)第二个但是是你需要始终检查是否有一个值,然后才能使用它。

DateTime? date1 = null;
DateTime date2 = date1.Value;

这将引发异常"可为 null 的对象必须具有值"。

所以这并不像添加可为空运算符那么简单,每次要使用变量时都需要检查属性"HasValue":

DateTime? date1 = DateTime.Now;
if(date1.HasValue)
{
    DateTime date2 = date1.Value;
}

明智地使用可为空的值。

使用?就足够了,比如

DateTime? dt = null;

因此,您的不可为空类型变为可为空的类型

您可以在类型末尾添加字符?

DateTime? date;

严格来说,DateTime是一个struct(即值类型),而不是一个class(这是引用类型),这就是为什么它不可为空的原因。 Nullable<DateTime> ,又名 DateTime?可为空的Nullable<T> struct由编译器进行特殊处理,使其在==!=(通过.HasValue)和大多数其他操作(通过所谓的"提升运算符")方面非常像您期望的那样。

DateTime是一个struct,所以它是value types。不能null值类型。除非您可以将nullable types用于DateTime或其他值类型;

可为空的类型是 System.Nullable 结构的实例。一个 可为 null 的类型可以表示其 基础值类型,外加一个附加 null 值

可为 null 的类型表示带有问号 ? 。例如;

DateTime? date = null;

顺便说一下,DateTime?等同于System.Nullable<DateTime>

如果使用可为空的DateTime,则可以检查它是否有值;

if(date.HasValue == true)

当然,您可以将它们与相等运算符一起使用,例如==!=

相关文章:
  • 没有找到相关文章