Лучшая практика: новый DateTime () против DateTime.Parse () - PullRequest
7 голосов
/ 13 ноября 2011

Допустим, я создаю экземпляр объекта класса, который имеет имя и дату.Что считается наилучшей практикой при установке даты?

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 = new List<Employee>() 
{ 
    new Employee {Name = "Foo", HireDate = DateTime.Parse("2000, 1, 15")}, 
    new Employee {Name = "Bar", HireDate = DateTime.Parse("2001, 5, 25")}, 
}; 

Я предполагаю, что на самом деле нет большой разницы, но я немного новичок в C #, поэтому яЯ не уверен, что предпочитают большинство программистов на C # и почему (производительность, читаемость и т. д.).Заранее благодарим за любые идеи, которые вы можете дать!

Ответы [ 3 ]

13 голосов
/ 13 ноября 2011

Предпочитать 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());

В аргументе против 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.


Если вы заинтересованы в упрощении спецификации констант даты / времени в своем коде, есть библиотека, которую Джон Скит написал для этого.

Этонемного устаревший и не поддерживаемый, но конкретный код (методы расширения для целочисленных констант / структуры даты и времени), вероятно, на самом деле не требует особого обслуживания.*

Исходный код для этих расширений находится под MiscUtil\MiscUtil\Extensions\TimeRelated\ (внутри исходного zip-файла)

Это позволит вам писать ваши даты более дружелюбно, но все же даст вам чистый код спроизводительность, аналогичная new DateTime(2012, 11, 13):

DateTime someDateAndTime = 19.June(1976) + 8.Hours();
6 голосов
/ 13 ноября 2011

Полагаю, это в конечном итоге субъективно, но я не могу придумать какой-либо веской причины использовать Parse в этой ситуации. Зачем выполнять (неэффективный) анализ строки над простым конструктором, который принимает фактические значения компонентов?

4 голосов
/ 13 ноября 2011

Я бы просто использовал new DateTime() в приведенном вами примере. Вы точно знаете, что такое год / месяц / день, составляющие даты. Зачем создавать строку и анализировать ее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...