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的有效定义,如果开发人员确定如此。
表示空值的最可维护方式是使用Nullable
即DateTime?
。 这样,空值清楚地表示为非值而不是需要特殊处理的魔法值。
(当然,空值也需要特殊处理,但要忽略它。)
如果使用魔术值来表示空值,则没有任何值比其他任何值更好。 您可以使用DateTime.MinValue
或new DateTime()
(它们给出相同的结果),或者您可以使用任何超出应用程序使用范围的任意值。
像DateTime.MinValue这样的值有一点点优势,因为它已经被定义为常量,另一方面你可以定义自己的常量,它具有稍微好一点的名称,例如:
public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);