C# C中DateTime.MinValue与new DateTime()的比较#
获取SQL DateTime时,Resharper建议在值为C# C中DateTime.MinValue与new DateTime()的比较#,c#,sql-server,datetime,C#,Sql Server,Datetime,获取SQL DateTime时,Resharper建议在值为DBNull.value时使用new DateTime()。我一直使用DateTime.MinValue。哪一种是正确的方法 DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime(); 发件人: MinValue定义分配给未初始化日期时间变量的日期和时间 因此,结果日期将是相同的。
DBNull.value
时使用new DateTime()。我一直使用DateTime.MinValue
。哪一种是正确的方法
DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime();
发件人:
MinValue定义分配给未初始化日期时间变量的日期和时间
因此,结果日期将是相同的。由于DateTime
是一种值类型,因此这两个选项应该是等效的。就我个人而言,我更喜欢编写DateTime.MinValue
,因为它是自我记录的
PS:如果您的数据可以包含(有意义的)空值,您可能需要考虑使用(<代码> DATETIME.<代码> >。< /P> < P>没有合适的方式。人们建立了一个惯例,团队也遵循这个惯例
DateTime.MinValue和new DateTime()是空值的有效定义,如果负责开发人员确定是空值的话。我会说始终使用MinValue,因为这样您就可以确切地知道其中的值。当您仅使用new DateTime()时,您正在初始化它以保存一个值,但没有指定要放入哪个值。将值显式地放入其中也更加清晰明了。DateTime的默认值是DateTime.MinValue
,所以我想您使用哪一个并不重要;) 通常,我会显式地处理NULL
案例。大致如下:
if (!sqlQueryResults.IsNull("Data"))
DoComputationDependantOnDateTime((DateTime) sqlQueryResults["Data"]);
在某些情况下,即使不存在数据,执行逻辑也是有意义的。在这种情况下,只有您知道从哪个默认值开始。可能的候选人:
DateTime.MinValue
DateTime.MaxValue
DateTime.Now
我永远不会使用newdatetime()
,因为它的可读性非常差。那句话的回报是什么?您(以及该项目的未来开发人员)可能需要查看文档,以确定该值被初始化为什么。表示空值的最易于维护的方法是使用可空的,即日期时间?
。这样,空值就可以清楚地表示为非值,而不是需要特殊处理的幻值
(空值当然也需要特殊处理,但很难忽略。)
如果您使用一个魔术值来表示空值,那么没有任何值比任何其他值更好。您可以使用DateTime.MinValue
或new DateTime()
(给出相同的结果),也可以使用应用程序使用范围之外的任意值
DateTime.MinValue这样的值有一点优势,因为它已经被定义为常量,另一方面,您可以定义自己的常量,该常量的名称稍好一些,例如:
public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);
new DateTime()实际上将其设置为一个值。它基本上是“default(DateTime)”,它是根据构造结构的默认值的规则设置的。ie.为所有成员设置默认值。这不会编译-“类型'System.DateTime'不能声明为常量”