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.
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();
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
.
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())
{
//...
}
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
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);
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.
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