2010-05-24 2 views
92

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

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

+1

Вызвать перегруженный метод, который устанавливает параметр: http://stackoverflow.com/a/3031309/492 –

ответ

170

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(); 
+0

+1, хороший чит;) – Diadistis

+3

Что относительно DateTime.MinValue? –

+2

@ Dr.Zim: Нет, это только чтение, но не постоянное. –

59

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

См. Также this related question about TimeSpan.

+0

Только то, что я искал. Иногда используется DateTime? беспорядочно. – pettys

+0

спасибо .. default или minvalue by @Dr. Зим делает трюк для меня.но по умолчанию это то, что мне нравится. спас меня от публикации другого вопроса! :) – nawfal

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 
+0

Не могли бы вы объяснить этот код? –

+0

сделано .................. –

+0

ОК спасибо :) Дата времени также мы можем дать такой же способ, как .param [1] = DateTime (5)? –

7

новый DateTime() также равно DateTime.MinValue

Вы могли создать параметр по умолчанию, как это.

void test(DateTime dt = new DateTime()) 
{ 
//... 
} 
+1

Не работает, вы не можете использовать функции в параметре по умолчанию. – Kirbinator

+1

@ Кирбинатор работает, попробуйте. – conical

+0

Я не могу поверить, что он компилируется, когда я это делаю. Я еще не видел, если это будет хорошо во время выполнения. –

0
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); 
0

вы могли бы использовать:

Datetime.MinValue 

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

+0

Не отвечает на этот вопрос, поскольку вы не можете установить его как значение по умолчанию, поскольку оно не является константой –

Смежные вопросы