104

DateTime がオブジェクトであり、既定の C# パラメーターにコンパイル時の定数しか割り当てられない場合、DateTime などのオブジェクトに既定値をどのように指定しますか?

名前付きパラメーターをデフォルト値で使用して、コンストラクターで POCO の値を初期化しようとしています。

4

6 に答える 6

190

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();
于 2010-05-24T03:24:53.137 に答える
60

これを直接行う唯一の方法はdefault(DateTime)、コンパイル時の定数である value を使用することです。DateTime?または、 を使用してデフォルト値を に設定することで、この問題を回避できますnull

についてのこの関連する質問TimeSpanも参照してください。

于 2010-05-24T03:28:41.250 に答える
8

new DateTime() も DateTime.MinValue に等しい

このようにデフォルトのパラメータを作成できます。

void test(DateTime dt = new DateTime())
{
//...
}
于 2011-12-30T21:56:48.067 に答える
4

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
于 2010-05-24T03:38:23.707 に答える
-1
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);
于 2012-10-04T10:06:08.420 に答える
-3

あなたが使用することができます:

Datetime.MinValue

初期化用。

于 2013-04-05T10:22:12.823 に答える