Comment puis-je définir la valeur par défaut de DateTime dans un paramètre facultatif?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Il existe une solution de contournement pour cela, tirant parti des types nullables et du fait que null
est une constante au moment de la compilation. (C'est un peu un hack cependant, et je suggère de l'éviter à moins que vous ne puissiez vraiment pas.)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
En général, je préférerais l'approche de surcharge standard suggérée dans les autres réponses:
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}
Je suppose que tu ne voulais pas vraiment addedOn = DateTime.Now
car cela suggère que vous n'obtiendrez aucun résultat car tout serait ajouté avant "Maintenant". :)
Un DateTime
par défaut peut être défini comme ceci:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
Mise à jour
Si vous traitez avec SQL Server, n'oubliez pas qu'il n'accepte pas par défaut (DateTime) ce qui est 1/1/0001. Le DateTime minimal de SQL Server est 1/1/1753 ( explication ). Cependant, DateTime2 de SQL accepte le 1/1/0001.
Je modifierais légèrement la solution de LukeH comme:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
ce qui est plus court et plus lisible, semble-t-il.
N'utilisez pas de paramètre facultatif:
public SomeClassInit(Guid docId, DateTime addedOn)
{
SomeClassInitCore(docId, addedOn);
}
public SomeClassInit(Guid docId)
{
SomeClassInitCore(docId, null);
}
private SomeClassInitCore(Guid docId, DateTime? addedOn)
{
// set default value
if (addedOn.IsNull) addedOn = DateTime.Now;
//Init codes here
}
. NET 4.0 a des paramètres facultatifs . ( Google est aussi votre ami , ici.)
EDIT (à cause d'Anthony Pegram correct, commentaire) ...
Et oui, c'est comme ça que vous le feriez.
Mais DateTime.
Maintenant (propriété statique, sur cette classe) n'est pas connu avant l'exécution . En tant que tel, vous ne pouvez pas l'utiliser comme valeur facultative .
.NET 3.5 ne le fait pas ... alors vous devrez faire ce que JS Bangs a dit ...
public SomeClassInit(Guid docId)
{
return SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
ou même le paramètre de vérification/valeur nulle de la réponse de munificent.
Vive Anthony.
C # n'a pas de paramètres facultatifs dans ce sens. Si vous souhaitez rendre addedOn
facultatif, vous devez écrire une surcharge qui ne nécessite pas ce paramètre et passer DateTime.Now
à la version à deux arguments.