首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.DateTime?vs System.DateTime

System.DateTime?vs System.DateTime
EN

Stack Overflow用户
提问于 2009-11-13 14:29:31
回答 5查看 62.8K关注 0票数 31

我正在编写一些代码,其中需要从页面中的Calendar控件读取日期值(Ajax工具箱:日历扩展程序)。

下面的代码:

代码语言:javascript
复制
DateTime newSelectedDate = myCalendarExtender.SelectedDate;

提供了以下错误:

代码语言:javascript
复制
Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)

但是,通过插入强制转换,我可以让代码正常工作:

代码语言:javascript
复制
DateTime newSelectedDate = (DateTime)myCalendarExtender.SelectedDate; // works fine!

日历控件(Ajax工具包)的“SelectedDate”属性将数据类型描述为“System.DateTime?”很明显“?”和这一切都有关系。

当数据类型包含此符号(?)时,究竟发生了什么?我假设我可以直接将'SelectedDate‘属性应用到'DateTime’类型的变量中,而无需转换。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-13 14:30:47

?表示该类型是可空的。有关详细信息,请参见例如MSDN

Nullable是一个编译器支持的值类型包装器,它允许值类型变为空。

要访问DateTime值,您需要执行以下操作:

代码语言:javascript
复制
DateTime? dateOrNull = myCalendarExtender.SelectedDate;
if (dateOrNull != null)
{
    DateTime newSelectedDate = dateOrNull.Value;
}
票数 49
EN

Stack Overflow用户

发布于 2009-11-13 14:32:12

DateTime?Nullable<DateTime>相同,即:DateTime?的实例可以包含'NULL',而DateTime的实例不包含‘NULL’。(自.NET 2.0以来,所有值类型都是如此。值类型不能包含NULL,但从.NET 2.0开始,可空值类型通过Nullable<T>构造(或速记)。

你能得到DateTime的价值吗?并通过这样做将其放入DateTime中:

代码语言:javascript
复制
DateTime? someNullableDate;
DateTime myDate;

if( someNullableDate.HasValue )
   myDate = someNullableDate.Value;

另一种获取Nullable值的conciser方法是使用null合并运算符:

代码语言:javascript
复制
DateTime myDate = someNullableDate?? default(DateTime);
票数 24
EN

Stack Overflow用户

发布于 2009-11-13 14:42:40

一个更好的解决方案,而IMO是所有问题中具有可空类的最好的特性。

代码语言:javascript
复制
DateTime newSelectedDate = myCalendarExtender.SelectedDate.GetValueOrDefault();
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1729553

复制
相关文章

相似问题

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