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