DateTime がオブジェクトであり、既定の C# パラメーターにコンパイル時の定数しか割り当てられない場合、DateTime などのオブジェクトに既定値をどのように指定しますか?
名前付きパラメーターをデフォルト値で使用して、コンストラクターで POCO の値を初期化しようとしています。
DateTime がオブジェクトであり、既定の C# パラメーターにコンパイル時の定数しか割り当てられない場合、DateTime などのオブジェクトに既定値をどのように指定しますか?
名前付きパラメーターをデフォルト値で使用して、コンストラクターで POCO の値を初期化しようとしています。
DateTime
定数として使用することはできませんが、DateTime?
代わりに null 許容型 ( ) にすることができます。
のデフォルト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)
、コンパイル時の定数である value を使用することです。DateTime?
または、 を使用してデフォルト値を に設定することで、この問題を回避できますnull
。
についてのこの関連する質問TimeSpan
も参照してください。
new 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
private System.String _Date= "01/01/1900";
public virtual System.String Date
{
get { return _Date; }
set { _Date= value; }
}
以下のようなラベルに値を割り当てることができます。
lblDate.Text = Date;
また、値を取得できます。
DateTime dt = Convert.ToDateTime(label1.Text);
あなたが使用することができます:
Datetime.MinValue
初期化用。