我正在编写一些代码,其中需要从页面中的Calendar控件读取日期值(Ajax工具箱:日历扩展程序)。
下面的代码:
DateTime newSelectedDate = myCalendarExtender.SelectedDate;提供了以下错误:
Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)但是,通过插入强制转换,我可以让代码正常工作:
DateTime newSelectedDate = (DateTime)myCalendarExtender.SelectedDate; // works fine!日历控件(Ajax工具包)的“SelectedDate”属性将数据类型描述为“System.DateTime?”很明显“?”和这一切都有关系。
当数据类型包含此符号(?)时,究竟发生了什么?我假设我可以直接将'SelectedDate‘属性应用到'DateTime’类型的变量中,而无需转换。
谢谢
发布于 2009-11-13 14:30:47
?表示该类型是可空的。有关详细信息,请参见例如MSDN
Nullable是一个编译器支持的值类型包装器,它允许值类型变为空。
要访问DateTime值,您需要执行以下操作:
DateTime? dateOrNull = myCalendarExtender.SelectedDate;
if (dateOrNull != null)
{
DateTime newSelectedDate = dateOrNull.Value;
}发布于 2009-11-13 14:32:12
DateTime?与Nullable<DateTime>相同,即:DateTime?的实例可以包含'NULL',而DateTime的实例不包含‘NULL’。(自.NET 2.0以来,所有值类型都是如此。值类型不能包含NULL,但从.NET 2.0开始,可空值类型通过Nullable<T>构造(或速记)。
你能得到DateTime的价值吗?并通过这样做将其放入DateTime中:
DateTime? someNullableDate;
DateTime myDate;
if( someNullableDate.HasValue )
myDate = someNullableDate.Value;另一种获取Nullable值的conciser方法是使用null合并运算符:
DateTime myDate = someNullableDate?? default(DateTime);发布于 2009-11-13 14:42:40
一个更好的解决方案,而IMO是所有问题中具有可空类的最好的特性。
DateTime newSelectedDate = myCalendarExtender.SelectedDate.GetValueOrDefault();https://stackoverflow.com/questions/1729553
复制相似问题