C# 4 значения параметров по умолчанию: Как назначить значение DateTime/ объекта по умолчанию?

Если DateTime является объектом и параметрам C# по умолчанию можно назначать только константы времени компиляции, как вы предоставляете значения по умолчанию для таких объектов, как DateTime?

Я пытаюсь инициализировать значения в POCO с помощью конструктора, используя именованные параметры со значениями по умолчанию.

6 ответов

Решение

DateTime не может использоваться как константа, но вы можете сделать его обнуляемым типом (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
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

для инициализации.

Другие вопросы по тегам