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

时间:2010-03-16 09:17:44

标签: c# sql-server datetime

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

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

6 个答案:

答案 0 :(得分:18)

来自the documentation of DateTime.MinValue

  

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

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

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

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

(当然,空值也需要特殊处理,但更难以忽视。)

如果使用魔术值来表示空值,则没有任何值比其他任何值好得多。您可以使用DateTime.MinValuenew DateTime()(提供相同的结果),也可以使用超出应用程序使用范围的任意值。

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

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