Значения параметров значения по умолчанию C# 4: Как присвоить значение Даты и времени/объекта по умолчанию? [дубликат]

Этот вопрос уже имеет ответ здесь:

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

Я пытаюсь инициализировать значения в ПОСТЕПЕННО с конструктором, с помощью названный параметрами со значениями по умолчанию.

101
задан Zachary Scott 24 May 2010 в 03:11
поделиться

3 ответа

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();
185
ответ дан 24 November 2019 в 04:38
поделиться

В отличие от 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
4
ответ дан 24 November 2019 в 04:38
поделиться

Единственный способ сделать это напрямую - использовать значение default(DateTime), которое является константой времени компиляции. Или вы можете обойти это, используя DateTime? и установив значение по умолчанию на null.

См. также этот смежный вопрос о TimeSpan.

60
ответ дан 24 November 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: