Comment puis-je définir la valeur par défaut pour DateTime en paramètre facultatif?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Comment puis-je définir la valeur par défaut pour DateTime en 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 de la compilation. (C'est un peu un bidouillage cependant, et je suggérerais 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 vous n'avez pas vraiment envie addedOn = DateTime.Now
parce que vous suggère de ne jamais obtenir un résultat que tout devrait être ajouté avant le "Maintenant". :)
Par défaut DateTime
peut être définie comme ceci:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
Mise à jour
Si vous faites affaire avec SQL Serveur, n'oubliez pas qu'il n'accepte pas par défaut(DateTime) qu'est-ce que 1/1/0001. SQL Server est minime DateTime est 1/1/1753 (explication). SQL DateTime2 accepte 1/1/0001, cependant.
N'utilisez pas de 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 n'ont paramètres facultatifs. (google est aussi ton ami, ici.)
EDIT (parce que d'Anthony Pegram correct, commentaire)...
Et oui, c'est la façon dont vous le feriez.
Mais DateTime.
Maintenant (propriété statique, sur cette classe) n'est pas de savoir jusqu' au moment de l'exécution. En tant que tel, vous ne pouvez pas l'utiliser comme une option de valeur.
.NET 3.5 n'est pas ... donc, alors que vous auriez à faire ce que JS Bangs 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 nul de la vérification/null valeur de paramètre de généreux réponse.
Cheers Anthony.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.