Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中DateTime.MinValue与new DateTime()的比较#_C#_Sql Server_Datetime - Fatal编程技术网

C# C中DateTime.MinValue与new DateTime()的比较#

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定义分配给未初始化日期时间变量的日期和时间 因此,结果日期将是相同的。

获取SQL DateTime时,Resharper建议在值为
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'不能声明为常量”