DateTimeがオブジェクトであり、デフォルトのC#パラメーターにコンパイル時定数のみを割り当てることができる場合、DateTimeなどのオブジェクトにデフォルト値を提供するにはどうすればよいですか?
デフォルト値の名前付きパラメーターを使用して、コンストラクターでPOCOの値を初期化しようとしています。
DateTime
は定数として使用できませんが、null許容型(DateTime?
)代わりに。
DateTime?
null
のデフォルト値。関数の開始時にnull
に設定されている場合は、任意の値に初期化できます。
static void test(DateTime? dt = null)
{
if (dt == null)
{
dt = new DateTime(1981, 03, 01);
}
//...
}
次のような名前付きパラメーターを使用して呼び出すことができます。
test(dt: new DateTime(2010, 03, 01));
そして、次のようなデフォルトのパラメーターを使用します。
test();
これを直接行うことができる唯一の方法は、コンパイル時の定数である値default(DateTime)
を使用することです。または、DateTime?
を使用し、デフォルト値をnull
に設定することで回避できます。
TimeSpan
に関するこの関連質問 も参照してください。
新しいDateTime()もDateTime.MinValueと等しい
そのようなデフォルトのパラメータを作成できます。
void test(DateTime dt = new DateTime())
{
//...
}
VBとは異なり、C#は日付リテラルをサポートしていません。また、ILではオプションのパラメーターはこのように見えるため、属性で偽造することはできません。
.method private hidebysig static void foo([opt] int32 x) cil managed
{
.param [1] = int32(5)
.maxstack 8
L_0000: nop
L_0001: ret
}
.method //this is a new method
private hidebysig static //it is private, ???, and static
void foo //it returns nothing (void) and is named Foo
([opt] int32 x) //it has one parameter, which is optional, of type int32
.param [1] = int32(5) //give the first param a default value of 5