how i can set default value for DateTime in optional parameter?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
how i can set default value for DateTime in optional parameter?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
C# doesn't have optional parameters in this sense. If you want to make addedOn
optional, you should write an overload that doesn't require that parameter, and passes DateTime.Now
to the two-argument version.
Don't use an optional parameter:
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 does have optional parameters. (google is also your friend, here.)
EDIT (because of Anthony Pegram correct, comment)...
And yes, that is how you would do it.
But DateTime.
Now (static property, on that class) is not know until run-time. As such, you can't use that as an optional value.
.NET 3.5 doesn't ... so then you would have to do what JS Bangs said...
public SomeClassInit(Guid docId)
{
return SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
or even the null checking/null value parameter from munificent's answer.
Cheers Anthony.
There is a workaround for this, taking advantage of nullable types and the fact that null
is a compile-time constant. (It's a bit of a hack though, and I'd suggest avoiding it unless you really can't.)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
In general, I'd prefer the standard overloading approach suggested in the other answers:
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}