最佳实践:new DateTime()vs DateTime.Parse()

aev*_*nko 7 c# datetime

假设我正在创建一个具有名称和日期的类对象的实例.设置日期时哪个被认为是最佳做法?

var employees = new List<Employee>() 
{ 
    new Employee {Name = "Foo", HireDate = new DateTime(2000, 1, 15)}, 
    new Employee {Name = "Bar", HireDate = new DateTime(2001, 5, 25)}, 
}; 
Run Code Online (Sandbox Code Playgroud)

要么

var employees = new List<Employee>() 
{ 
    new Employee {Name = "Foo", HireDate = DateTime.Parse("2000, 1, 15")}, 
    new Employee {Name = "Bar", HireDate = DateTime.Parse("2001, 5, 25")}, 
}; 
Run Code Online (Sandbox Code Playgroud)

我假设确实没有太大的区别,但我对C#稍微有点新意,所以我不确定哪个是大多数C#程序员以及为什么(性能,可读性等).提前感谢您提供的任何见解!

Mer*_*ham 13

喜欢new DateTime.

赞成new,它允许您直接使用变量:

// clean because the variable is applied directly to the function
int year = 2000;
var date1 = new DateTime(year, 1, 15);
var date1 = new DateTime(year, 7, 3);
var date1 = new DateTime(year, 8, 19);

// kind of gross and prone to errors because it is appended to the string
int day = 23;
var date1 = DateTime.Parse("2001, 5, " + day.ToString());
Run Code Online (Sandbox Code Playgroud)

在争论中Parse,它直到运行时才检测到错误:

var date1 = new DateTime(200fdsa, 1, 15); // Error on compile
var date2 = DateTime.Parse("2001fdsjf, 5, 25"); // Must run to find the error
Run Code Online (Sandbox Code Playgroud)

DateTime.Parse将始终具有较差的性能,因为它需要运行检测错误的代码并将字符串转换为数值.它在您的程序运行时执行此操作.

但是 - 如果您必须接受字符串输入(例如,从文本文件中),您应该使用为该作业构建的工具:DateTime.Parse.


如果您对简化代码中日期/时间常量的规范感兴趣,可以使用Jon Skeet为此编写的库.

它有点旧,没有维护,但具体的代码(整数常量/日期和时间结构的扩展方法)可能并不需要大量的维护.

这些扩展的源代码在MiscUtil\MiscUtil\Extensions\TimeRelated\(在源zip中)

它将让您以更友好的方式编写日期时间,但仍然可以为您提供具有类似性能的干净代码new DateTime(2012, 11, 13):

DateTime someDateAndTime = 19.June(1976) + 8.Hours();
Run Code Online (Sandbox Code Playgroud)


Kir*_*oll 6

我认为这最终是主观的,但我不能想到Parse在这种情况下使用的任何好理由.为什么对采用实际组件值的简单构造函数执行(低效)字符串解析?