首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使非空类为空

问使非空类为空
EN

Stack Overflow用户
提问于 2013-01-30 11:17:29
回答 7查看 829关注 0票数 1

可能重复: DateTime“空”值

在C#中有许多内置类是不可空的。例如,Datetime,有时我想检查我的datatime对象是否为空,但不允许。如何向datetime类插入空性?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-30 11:27:10

当然,只要对声明进行更改,就可以使整数、双倍、日期时间等变为空。

代码语言:javascript
复制
DateTime? dt = null.

但

有两件事你需要注意。

1) DateTime?而DateTime不是相同的数据类型,所以,如果您这样做的话:

代码语言:javascript
复制
DateTime? date1 = null;
date1 = DateTime.Now;

DateTime date2 = date1; // Wont work.

访问可空类型的值的正确方法如下:

代码语言:javascript
复制
DateTime date2 = date1.Value;

2)第二个问题是,在使用该值之前,必须始终检查是否存在值。

代码语言:javascript
复制
DateTime? date1 = null;
DateTime date2 = date1.Value;

这将引发一个异常,"Nullable对象必须有一个值“。

因此,并不像添加可空运算符那样简单,每次使用变量时都需要检查属性"HasValue“:

代码语言:javascript
复制
DateTime? date1 = DateTime.Now;
if(date1.HasValue)
{
    DateTime date2 = date1.Value;
}

明智地使用虚线。

票数 2
EN

Stack Overflow用户

发布于 2013-01-30 11:18:19

在C#中有许多内置类是不可空的。

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

MSDN -值类型

与引用类型不同,值类型不能包含空值。但是,可空类型特性确实允许将值类型赋值为null。

您可以使用Nullable和DateTime使其为空。

代码语言:javascript
复制
DateTime? dateTimeObject = null;

带有?的问号DateTime使其为Nullable。

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

票数 4
EN

Stack Overflow用户

发布于 2013-01-30 11:25:05

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

然而,有一种欺骗;

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

用法:

代码语言:javascript
复制
DateTime? foo = new DateTime(...);

foo.Value.<datetime member>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14602701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档