.NET中的可空类型缺少方法

.NET中的可空类型缺少方法,.net,nullable,.net,Nullable,我今天注意到,如果您声明了一个可为空的DateTime对象,您将无法获得与使用标准DateTime对象时相同的函数集 例如: DateTime? nullableDT = DateTime.Now; DateTime regularDT = DateTime.Now; 在上面的代码中,nullableDT不能使用以下任何函数: ToFileTime ToFileTimeUtc ToLocalTime ToLongDateString ToLongTimeString ToOADate ToSh

我今天注意到,如果您声明了一个可为空的DateTime对象,您将无法获得与使用标准DateTime对象时相同的函数集

例如:

DateTime? nullableDT = DateTime.Now;
DateTime regularDT = DateTime.Now;
在上面的代码中,nullableDT不能使用以下任何函数:

ToFileTime
ToFileTimeUtc
ToLocalTime
ToLongDateString
ToLongTimeString
ToOADate
ToShortDateString
ToShortTimeString
ToString(IFormatProvider)
ToString(String)
ToString(String, IFormatProvider)
ToUniversalTime
这是一个简短的列表,还有很多方法不可用


为什么.NET的行为是这样的?我通过在可为空的日期周围抛出一个
Convert.ToDateTime()
来解决这个问题,但这似乎很难。。。有更好的方法吗?

那是因为需要调用以获取实际的
日期时间值。

可为空的
不是
t
,它只是包装了
t
。因此它没有在
t
上定义成员。如果要访问
T
的方法,可以执行以下操作:

if (nullableDT.HasValue)
{
    Console.WriteLine(nullableDT.Value.ToShortTimeString());
    ...
}

您也可以考虑使用<代码> nulLab.GeValueOrrDebug()/Cyto>,如果<代码> HasValue/Cuth>是false,则不会引发无效操作异常。