在C#中“DateTime?”是什么意思?
我正在阅读一本.Net的书,在其中一个代码示例中,有一个类定义了这个字段:
private DateTime? startdate
DateTime?
意思?
由于DateTime
是一个struct
,而不是一个class
,所以当你声明一个types的字段或variables时,你会得到一个DateTime
对象 ,而不是一个引用 。 而且,就像int
不能为null
,这个DateTime
对象也不能为null,因为它不是一个引用。
添加问号会将其变成可为空的types ,这意味着它既可以是DateTime
对象, 也可以是null
。
DateTime?
是Nullable<DateTime>
语法糖,其中Nullable
本身就是一个struct
。
这是一个可以空的DateTime。 ?
在原始types/结构之后指示它是可空的版本。
DateTime是一个永远不能为空的结构。 来自MSDN :
date时间值types表示date和时间,值从1999年1月1日午夜12:00:00开始,直到9999年12月31日晚11:59:59,Anno Domini或AD(也称为Common Era或CE) AD(CE)
DateTime?
可以是null。
A ? 作为值types的后缀允许空分配,这将是更不可能的。
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
表示一个对象,其基础types是一个值types,也可以分配一个空引用。
这意味着你可以写这样的东西:
DateTime? a = null; if (!a.HasValue) { a = DateTime.Now; if (a.HasValue) { Console.WriteLine(a.Value); } }
约会时间? 在合成上与Nullable <DateTime>等效。
它相当于可空<DateTime>。 你可以追加“?” 到任何原始types或结构。
它基本上给你一个额外的原始状态。 它可以是一个值,也可以是null。 在不需要赋值的情况下,它可以是有用的。 因此,而不是使用例如datetime.min或max,您可以将其指定为null来表示没有值。
正如我们所知,DateTime是一个结构意味着DateTime是一个值types,所以你得到一个DateTime对象,而不是一个引用,因为DateTime不是一个类,当你声明一个字段或variables的types,你不能初始化为null因为值types不接受null。 与int相同的方式不能为null。 所以DateTime对象永远不会为null,因为它不是一个引用。
但是有时我们需要可以为空的variables或值types的字段,那时候我们使用问号来使它们成为可空types,所以它们允许空值。
例如:-
约会时间? date = null;
诠释? intvalue = null;
在上面的代码中,variablesdate是DateTime的对象,或者是null。 相同的intvalue。
- ASP.Net MVCredirect到一个不同的视图
- 各种.NET Framework版本的操作系统兼容性
- “彻底”,设置Jetbrain的TeamCity CI服务器教程
- 如何使用缩短的时区显示date时间?
- ThreadAbortException
- 使用Html.TextBoxFor时,可以将文本框设置为只读吗?
- 当一个属性不能为null时使用什么exceptiontypes?
- SystemInformation.ComputerName,Environment.MachineName和Net.Dns.GetHostName之间的区别
- ContentControl和ContentPresenter有什么区别?