ベストプラクティス:新しいDateTime()とDateTime.Parse()

名前と日付の両方を持つクラスオブジェクトのインスタンスを作成しているとしましょう。日付を設定する際にはベストプラクティスとみなされますか?

var employees = new List() 
{ 
    new Employee {Name = "Foo", HireDate = new DateTime(2000, 1, 15)}, 
    new Employee {Name = "Bar", HireDate = new DateTime(2001, 5, 25)}, 
}; 

または

var employees = new List() 
{ 
    new Employee {Name = "Foo", HireDate = DateTime.Parse("2000, 1, 15")}, 
    new Employee {Name = "Bar", HireDate = DateTime.Parse("2001, 5, 25")}, 
}; 

I am assuming there really isn’t a huge difference, but I am
slightly new to C# so I am not sure which is
prefered by the majまたはity of C# programmers
and why (perfまたはmance, readability, etc.). Thanks in advance fまたは
any insight you can give!

ベストアンサー

新しい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 will always have poorer performance,
because it needs to run code that detect errors and converts the
string to numeric values. It does this while your program is
running.

ただし、文字列入力(テキストファイルなど)を受け入れる必要がある場合は、 DateTime.Parse
というジョブ用に作成されたツールを使用する必要があります。


あなたのコードで日付/時定数の指定を単純化することに興味があるなら、Jon Skeetが書いたライブラリがあります。

これは少し古く、維持されていませんが、特定のコード(整数定数/日付と時間構造の拡張メソッド)は、おそらく実際には多くのメンテナンスを必要としません。

これらの拡張機能のソースコードは、ソースコード内の MiscUtil MiscUtil Extensions
TimeRelated
の下にあります。

これは、あなたの日付時刻をより親切な形で書くことができるようになりますが、 new
DateTime(2012、11、13)
と同様のパフォーマンスでクリーンなコードを提供します。

DateTime someDateAndTime = 19.June(1976) + 8.Hours();

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です