Nullable DateTime 设置它获取无效参数无法转换为 long

Nullable DateTime setting it getting invalid argument with cannot convert to long

为什么我需要像这样将 DateTime 设置为 Nullable?

DateTime? Err_Rpt_Tm = new DateTime?(DateTime.Now);

Console.WriteLine(Err_Rpt_Tm);

因为我觉得在 Linqpad 中执行此操作很奇怪

DateTime Err_Rpt_Tm = new DateTime(DateTime.Now);

我收到这个错误

The best overloaded method match for 'System.DateTime.DateTime(long)' has some invalid arguments

Argument 1: cannot convert from 'System.DateTime' to 'long'

  1. DateTime.Now 永远不会为空,所以我不明白是否需要可为空的 DateTime?
  2. 将 System.DateTime 转换为长???我明确设置 DateTime 变量 "Err_Rpt_Tm"

没有 DateTime 构造函数接受 DateTime 对象,尽管它有很长时间的构造函数,即 DateTime(long ticks) 并且错误提示要使用构造函数。

您可以直接将 DateTime.Now 赋值给 DateTime 对象,不需要构造函数。

DateTime Err_Rpt_Tm = DateTime.Now;

分配给 Nullable DateTime

DateTime? Err_Rpt_Tm = DateTime.Now;

DateTime?Nullable<DateTime> 的缩写。让我们看看documentation on MSDN。在构造函数部分,唯一可用的构造函数是 Nullable<T>(T)。这解释了为什么您的代码的第一部分可以编译。

在第二种情况下,您正在尝试初始化 DateTime,并且 MSDN 清楚地表明没有接受类型 DateTime 的单个参数的构造函数。这就是为什么在第二种情况下会出现编译错误。

要解决此问题,您可以使用更简单的初始化形式:

DateTime? Err_Rpt_Tm = DateTime.Now;
DateTime Err_Rpt_Tm2 = DateTime.Now;

这是可能的,因为 Nullable<T> 实现了 operators 将可空类型与实际类型相互转换。