DateTime.MinValue与C#中的新DateTime()

获取SQL DateTime Resharper建议在值为DBNull.Value时使用new DateTime() 。 我一直使用DateTime.MinValue 。 哪种方法适当?

 DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime(); 

从DateTime.MinValue的文档 :

MinValue定义分配给未初始化的DateTime变量的日期和时间。

因此,结果日期将是相同的。 由于DateTime是值类型,因此两个选项应该是等效的。 就个人而言,我更喜欢写DateTime.MinValue ,因为它是自我记录的。

PS:如果您的数据可以包含(有意义的)空值,您可能需要考虑使用可空类型 ( DateTime? )。

通常,我会明确处理NULL情况。 这些方面的东西:

 if (!sqlQueryResults.IsNull("Data")) DoComputationDependantOnDateTime((DateTime) sqlQueryResults["Data"]); 

在某些情况下,即使没有数据,执行逻辑也是有意义的。 在这种情况下,只有您知道从哪个默认值开始。 可能的候选人:

  • DateTime.MinValue
  • DateTime.MaxValue
  • DateTime.Now

我永远不会使用new DateTime()因为它的可读性非常差。 该声明的回报是什么? 您(以及该项目的未来开发人员)可能必须查看文档以确定初始化值的内容。

我会说总是使用MinValue因为那时你确切地知道它的价值。 当您只是使用新的DateTime()时,您正在初始化它以保存一个值,但不指定要放入的值。 明确地将值放入其中也更清晰,更清晰。

DateTime的默认值 DateTime.MinValue ,所以我猜你使用哪一个并不重要;)

没有“正确”的方式。 人们建立了一个公约,团队遵循这个惯例。

DateTime.MinValue和new DateTime()是null的有效定义,如果开发人员确定如此。

表示空值的最可维护方式是使用NullableDateTime? 。 这样,空值清楚地表示为非值而不是需要特殊处理的魔法值。

(当然,空值也需要特殊处理,但要忽略它。)

如果使用魔术值来表示空值,则没有任何值比其他任何值更好。 您可以使用DateTime.MinValuenew DateTime() (它们给出相同的结果),或者您可以使用任何超出应用程序使用范围的任意值。

像DateTime.MinValue这样的值有一点点优势,因为它已经被定义为常量,另一方面你可以定义自己的常量,它具有稍微好一点的名称,例如:

 public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);