C # 4 domyślne wartości parametrów: jak przypisać domyślną wartość DateTime / object? [duplikat]

To pytanie ma już odpowiedź tutaj:

Jeśli DateTime jest obiektem i domyślne parametry C# mogą być przypisane tylko stałym czasom kompilacji, jak podać domyślne wartości dla obiektów takich jak DateTime?

Próbuję zainicjować wartości w POCO z konstruktorem, używając nazwanych parametrów z wartościami domyślnymi.

Author: Zachary Scott, 2010-05-24

6 answers

DateTime nie może być użyta jako stała, ale zamiast niej można uczynić z niej Typ nullable (DateTime?).

Podaj DateTime? domyślną wartość null, a jeśli na początku funkcji jest ustawiona na null, możesz ją zainicjować do dowolnej wartości.

static void test(DateTime? dt = null)
{
    if (dt == null)
    {
        dt = new DateTime(1981, 03, 01);
    }

    //...
}

Możesz wywołać go za pomocą nazwanego parametru, takiego jak:

test(dt: new DateTime(2010, 03, 01));

I z domyślnym parametrem takim jak:

test();
 178
Author: Brian R. Bondy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-24 03:30:25

Jedynym sposobem, aby to zrobić bezpośrednio jest użycie wartości default(DateTime), która jest stałą czasu kompilacji. Możesz też obejść to, używając DateTime? i ustawiając wartość domyślną na null.

Zobacz też to związane z tym pytanie o TimeSpan.

 60
Author: svick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:12

New DateTime() również równa się DateTime.MinValue

Można utworzyć domyślny parametr jak tak.

void test(DateTime dt = new DateTime())
{
//...
}
 7
Author: conical,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-30 21:56:48

W przeciwieństwie do VB, C# nie obsługuje literałów daty. A ponieważ opcjonalne parametry wyglądają tak w IL, nie możesz udawać ich atrybutami.

.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
Author: Jonathan Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-10 22:36:20
private System.String _Date= "01/01/1900";
public virtual System.String Date
{
   get { return _Date; }
   set { _Date= value; }
}

Możemy przypisać wartość do etykiety, jak podano poniżej,

lblDate.Text = Date;

Również możemy otrzymać wartość,

DateTime dt = Convert.ToDateTime(label1.Text);
 0
Author: Jom George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 10:16:44

Możesz użyć:

Datetime.MinValue

Do inicjalizacji.

 -1
Author: sstauross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 10:22:12