Définir la valeur par défaut pour DateTime dans le paramètre optionnel [dupliquer]
cette question a déjà une réponse ici:
- C# 4.0: Puis-je utiliser un TimeSpan comme paramètre optionnel avec une valeur par défaut? 8 réponses
comment définir la valeur par défaut de DateTime dans le paramètre optionnel?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
6 réponses
il y a une solution pour contourner cela, en profitant des types nullables et du fait que null
est une constante de temps de compilation. (C'est un peu un piratage cependant, et je suggère de l'éviter à moins que vous ne pouvez 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 vous ne vouliez pas vraiment addedOn = DateTime.Now
parce que cela suggérerait que vous n'obtiendriez jamais de résultat puisque tout serait ajouté avant "maintenant". :)
par défaut DateTime
peut être définie comme ceci:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
mise à jour
Si vous vous occupez de SQL Server, n'oubliez pas qu'il n'accepte pas par défaut(DateTime) ce qui est 1/1/0001. La DateTime minimale de SQL Server is 1/1/1753 ( explication ). La DateTime2 de SQL accepte le 1/1/0001, cependant.
j'ai légèrement modifié la solution de LukeH comme:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
qui est plus court et plus lisible, il me semble.
N'utilisez pas un paramètre optionnel:
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 optionnels . ( google est également votre ami , ici.)
EDIT (à cause de Anthony Pegram correct, commentaire)...
et oui, c'est comme ça que tu le ferais.
Mais DateTime.
Maintenant (propriété statique, sur cette classe) est de ne pas savoir jusqu'à ce que run-time . En tant que tel, vous ne pouvez pas utilisez cette option comme valeur .
... donc tu devrais 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 null checking/null value de la réponse de munificent.
Santé Anthony.
C# n'a pas de paramètres optionnels dans ce sens. Si vous voulez rendre addedOn
optionnel, vous devriez écrire une surcharge qui ne nécessite pas ce paramètre, et passer DateTime.Now
à la version à deux arguments.