С# 4 значения параметров по умолчанию: как назначить значение DateTime/object по умолчанию?
Если DateTime является объектом, а параметрам С# по умолчанию могут назначаться только константы времени компиляции, как вы предоставляете значения по умолчанию для таких объектов, как DateTime?
Я пытаюсь инициализировать значения в POCO с помощью конструктора, используя именованные параметры со значениями по умолчанию.
Ответы
Ответ 1
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();
Ответ 2
Единственный способ сделать это напрямую - использовать значение default(DateTime)
, которое является константой времени компиляции. Или вы можете обойти это, используя DateTime?
и установив значение по умолчанию на null
.
См. также этот связанный вопрос о TimeSpan
.
Ответ 3
new DateTime() также равно DateTime.MinValue
Вы можете создать такой параметр по умолчанию.
void test(DateTime dt = new DateTime())
{
//...
}
Ответ 4
В отличие от VB, С# не поддерживает литералы даты. И поскольку дополнительные параметры выглядят так, как в 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
Ответ 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);
Ответ 6
вы можете использовать:
Datetime.MinValue
для инициализации.