web-dev-qa-db-fra.com

Valeurs de paramètre par défaut C # 4: Comment attribuer une valeur DateTime / Object par défaut?

Si DateTime est un objet et que les paramètres C # par défaut peuvent uniquement être affectés à des constantes de compilation, comment fournissez-vous des valeurs par défaut pour des objets tels que DateTime?

J'essaye d'initialiser des valeurs dans un POCO avec un constructeur, en utilisant des paramètres nommés avec des valeurs par défaut.

100
Zachary Scott

DateTime ne peut pas être utilisé comme constante, mais vous pouvez en faire un type nullable (DateTime?) au lieu.

Donner la DateTime? une valeur par défaut de null, et si elle est définie sur null au début de votre fonction, vous pouvez l’initialiser à la valeur de votre choix.

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

    //...
}

Vous pouvez l'appeler avec un paramètre nommé comme ceci:

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

Et avec le paramètre par défaut comme ceci:

test();
184
Brian R. Bondy

La seule façon de le faire directement consiste à utiliser la valeur default(DateTime), constante de la compilation. Ou vous pouvez contourner ce problème en utilisant DateTime? et en définissant la valeur par défaut sur null.

Voir aussi cette question connexe à propos de TimeSpan .

60
svick

new DateTime () est également égal à DateTime.MinValue

Vous pouvez créer un paramètre par défaut comme ceci.

void test(DateTime dt = new DateTime())
{
//...
}
8
conical

Contrairement à VB, C # ne prend pas en charge les littéraux de date. Et comme les paramètres facultatifs ressemblent à ceci dans IL, vous ne pouvez pas le simuler avec des attributs.

.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
Jonathan Allen