オプションのパラメータで DateTime のデフォルト値を設定するにはどうすればよいですか?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
オプションのパラメータで 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 であるデフォルト (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.
今(そのクラスの静的プロパティ)は実行時までわかりません。そのため、それをオプションの値として使用することはできません。
.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
}
または、munificent の回答からの null チェック/null 値パラメーターでさえ。
乾杯アンソニー。
この意味で、C# には省略可能なパラメーターはありません。オプションにしたい場合addedOn
は、そのパラメーターを必要としないオーバーロードを記述し、DateTime.Now
引数が 2 つのバージョンに渡す必要があります。