ユーザーが実際に値を指定したかどうか(MinValueの指定が無効であった)を確認するために、メソッドのオプションの日付パラメーター(デフォルトはMinValue)が必要でしたが、明らかにコンパイルではないため、許可されていません-時定数。
MSDNのページによると、「この定数の値は、0001年1月1日の00:00:00.0000000に相当します。」
では、なぜそれがコンパイル時定数ではないのでしょうか?また、許可されているInt32.MinValueを渡すのとはなぜ違うのですか?
ユーザーが実際に値を指定したかどうか(MinValueの指定が無効であった)を確認するために、メソッドのオプションの日付パラメーター(デフォルトはMinValue)が必要でしたが、明らかにコンパイルではないため、許可されていません-時定数。
MSDNのページによると、「この定数の値は、0001年1月1日の00:00:00.0000000に相当します。」
では、なぜそれがコンパイル時定数ではないのでしょうか?また、許可されているInt32.MinValueを渡すのとはなぜ違うのですか?
DateTime定数(または構造体)を定義することはできません。MSDNからconstに許可されているタイプは次のとおりです。
タイプの1つ:byte、char、short、int、long、float、double、decimal、bool、string、enumタイプ、または参照タイプ。
回避策:パラメータとしてnullableを使用します。IMOこれは、通常の値だけでなく、特別な値が明らかに異なるため、とにかくクリーンです。
void A(DateTime? p=null)
{
}
別の選択肢は次のとおりです。
void A(DateTime p=default(DateTime))
{
}
これは、デフォルトパラメータがdefault(T)
ユーザー定義型の有効なデフォルトパラメータ値として使用できることを示しています。
または、異なる数のパラメーターに対してメソッドをオーバーロードするだけです。