Этот вопрос уже имеет ответ здесь:
Как я могу установить значение по умолчанию для DateTime в дополнительном параметре?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Для этого есть обходной путь, использующий типы, допускающие значение NULL, и тот факт, что null
является константой времени компиляции. (Это немного похоже на взлом, и я бы посоветовал избегать его, если вы действительно не можете этого сделать.)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
В целом, я бы предпочел стандартный подход к перегрузке, предложенный в других ответах:
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}
Не используйте необязательный параметр:
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
}
В этом смысле C # не имеет необязательных параметров. Если вы хотите сделать addedOn
необязательным, вы должны написать перегрузку, которая не требует этого параметра и передает DateTime.Now
в версию с двумя аргументами.
.NET 4.0 действительно имеет необязательные параметры. (google также является вашим другом, здесь.)
EDIT (из-за правильного комментария Энтони Пеграма)...
И да, именно так вы бы и сделали.
Но DateTime.
Now (статическое свойство, на этом классе) не известно до времени выполнения. Как таковое, вы не можете использовать его как необязательное значение.
.NET 3.5 этого не делает... так что тогда вам придется делать то, что сказал JS Bangs...
public SomeClassInit(Guid docId)
{
return SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
или даже параметр проверки нуля/нулевого значения из ответа munificent.
С уважением, Энтони.