C# 最佳实践:new DateTime()与DateTime.Parse()的比较

C# 最佳实践:new DateTime()与DateTime.Parse()的比较,c#,datetime,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)}, }; var employ

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

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)}, 
}; 
var employees=新列表()
{ 
新员工{Name=“Foo”,HireDate=newdatetime(2000,1,15)},
新员工{Name=“Bar”,HireDate=newdatetime(2001,5,25)},
}; 

var employees=新列表()
{ 
新员工{Name=“Foo”,HireDate=DateTime.Parse(“2000,1,15”)},
新员工{Name=“Bar”,HireDate=DateTime.Parse(“2001,5,25”)},
}; 

我假设这两者之间并没有太大的区别,但我对C语言有点陌生,所以我不确定大多数C语言程序员更喜欢哪一种,以及为什么(性能、可读性等)。提前感谢您提供的任何见解

我认为这最终是主观的,但我想不出在这种情况下使用
Parse
有什么好的理由。为什么要对一个接受实际组件值的简单构造函数执行(低效的)字符串分析呢?

在您提供的示例中,我只使用
new DateTime()
。您确切地知道日期的年/月/日组成部分是什么。为什么要创建一个字符串并对其进行解析?

首选
新建日期时间

为了支持新的,它将允许您直接使用变量:

// 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());
在反对
Parse
的参数中,它直到运行时才检测到错误:

var date1 = new DateTime(200fdsa, 1, 15); // Error on compile
var date2 = DateTime.Parse("2001fdsjf, 5, 25"); // Must run to find the error
DateTime.Parse
的性能总是较差,因为它需要运行检测错误并将字符串转换为数值的代码。它在程序运行时执行此操作

但是,如果必须接受字符串输入(例如,从文本文件),则应使用为作业生成的工具:
DateTime.Parse


如果您对简化代码中日期/时间常量的规范感兴趣,那么Jon Skeet为此编写了一个库

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

这些扩展的源代码位于
MiscUtil\MiscUtil\extensions\TimeRelated\
下(在源zip中)

它可以让您以更友好的方式编写约会时间,但仍然可以为您提供与新的日期时间(2012、11、13)性能类似的干净代码。:


我想这取决于你有什么数据。。如果将各个部分作为int,请务必使用no string方法。但是,如果您有字符串版本(请考虑web应用程序中的datetime字段),请使用parse方法。感谢您指出其好处和后果。这是非常有意义的!这回答了我所假设的一切,但我并不确定。谢谢大家!+1指出字符串与普通代码相比总是很糟糕。
var date1 = new DateTime(200fdsa, 1, 15); // Error on compile
var date2 = DateTime.Parse("2001fdsjf, 5, 25"); // Must run to find the error
DateTime someDateAndTime = 19.June(1976) + 8.Hours();