(小ネタ)C#でデフォルト引数に今日の日付や現在時刻を指定する
ちょっと前ですが、以下の記事を読みました。あわせて読みたいの記事も読みましたが、どれも丁寧にまとめられていて良い内容でした。
日付を渡すには、Rubyではデフォルト引数で行うのが簡単と書かれていたので、これをC#でやってみようと思いました。
以下のようにデフォルト引数に今日の日付を設定したところ、コンパイルエラーになってしまいました。
string GetData(DateTime? target = DateTime.Today) { // targetを使った処理 }
エラーメッセージ
'target' の既定パラメーター値は、コンパイル時の定数である必要があります。
これはDateTime.Today
だけでなく、DateTime.Now
でも同じ。これはデフォルト引数で「今日の日付」とか「現在時刻」を使用することは出来ないってこと?
そんな不便な!と思ったのですが、簡単に回避する方法がありました。それが以下です。
string GetData(DateTime? target = null) { if (!target.HasValue) { target = DateTime.Today; } // targetを使った処理 }
デフォルト引数にはコンパイル時定数しか設定できないので、デフォルト引数にはnullを設定しておいて、メソッド内でnull判定をして、nullだったら今日の日付を設定する。
パラメータにnullを渡した場合も同じ動作となってしまいますが、今のところこれで困ったことは特にないです。 これでC#でもつらさを軽減できますね。
余談ですが、テストの実行には Chaining Assertion を使ってます。便利。