オプションのパラメーターでDateTimeのデフォルト値を設定するにはどうすればよいですか?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
この問題を回避するには、null許容型とnull
がコンパイル時定数であるという事実を利用します。 (ただし、これはちょっとしたハックです。本当にできない場合を除き、回避することをお勧めします。)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
一般的に、他の回答で提案されている標準的なオーバーロードアプローチを好むでしょう。
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}
あなたは本当にaddedOn = DateTime.Now
これは、「今」の前にすべてが追加されるため、結果が得られないことを示唆するためです。 :)
デフォルトのDateTime
は次のように設定できます。
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
更新
SQL Serverを扱う場合は、1/1/0001のdefault(DateTime)を受け入れないことを忘れないでください。 SQL Serverの最小のDateTimeは1/1/1753です( 説明 )。ただし、SQLのDateTime2は1/1/0001を受け入れます。
LukeHのソリューションを次のように少し変更します。
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
短くて読みやすいようです。
オプションのパラメーターを使用しないでください。
public SomeClassInit(Guid docId, DateTime addedOn)
{
SomeClassInitCore(docId, addedOn);
}
public SomeClassInit(Guid docId)
{
SomeClassInitCore(docId, null);
}
private SomeClassInitCore(Guid docId, DateTime? addedOn)
{
// set default value
if (addedOn.IsNull) addedOn = DateTime.Now;
//Init codes here
}
。NET 4.0にはオプションのパラメーターがあります 。 ( googleもあなたの友達です 、こちら。)
編集(Anthony Pegramが正しいため、コメント)...
そして、そう、それがあなたのやり方です。
しかし、DateTime.
Now(そのクラスの静的プロパティ)は、run-time。そのため、それをオプションのvalueとして使用することはできません。
.NET 3.5は...ではないので、JS Bangsが言ったことをしなければならないでしょう...
public SomeClassInit(Guid docId)
{
return SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
または、無許可の回答からのnullチェック/ null値パラメータです。
乾杯アンソニー。
この意味で、C#にはオプションのパラメーターはありません。 addedOn
をオプションにする場合は、そのパラメーターを必要としないオーバーロードを作成し、DateTime.Now
を2引数バージョンに渡します。