Как установить значение по умолчанию для DateTime в необязательном параметре?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Как установить значение по умолчанию для DateTime в необязательном параметре?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Существует обходное решение для этого, используя типы с нулевым значением и тот факт, что 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
}
Я бы немного изменил решение LukeH как:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
который короче и читабельнее, кажется.
Я предполагаю, что вы действительно не хотели addedOn = DateTime.Now
, потому что это предполагало, что вы никогда не получите никакого результата, поскольку все будет добавлено до "Сейчас".:)
Значение по умолчанию DateTime
может быть установлено следующим образом:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
Обновление
Если вы имеете дело с SQL Server, не забывайте, что он не принимает значение по умолчанию (DateTime), что равно 1/1/0001. Минимальный срок службы SQL Server DateTime равен 1/1/1753 (объяснение). SQL DateTime2 принимает 1/1/0001, однако.
Не используйте необязательный параметр:
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 имеет необязательные параметры. (Google тоже ваш друг, здесь.)
ИЗМЕНИТЬ (из-за того, что Энтони Пегэм прав, комментарий)...
И да, так вы бы это сделали.
Но DateTime.
Теперь (статическое свойство в этом классе) не известно до выполнения. Таким образом, вы не можете использовать это как необязательное значение.
.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
}
или даже параметр null check/null value из munificent answer.
Приветствия Энтони.
В этом смысле С# не имеет необязательных параметров. Если вы хотите сделать addedOn
необязательным, вы должны написать перегрузку, которая не требует этого параметра, и передает DateTime.Now
в версию с двумя аргументами.