如何在可选参数中设置 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
}
我猜您并不是真的想要addedOn = DateTime.Now
,因为这表明您永远不会得到任何结果,因为所有内容都将在“现在”之前添加。:)
DateTime
可以像这样设置默认值:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
更新
如果您使用 SQL Server,请不要忘记它不接受默认(日期时间)即 1/1/0001。SQL Server 的最小 DateTime 是 1/1/1753(解释)。不过,SQL 的 DateTime2 接受 1/1/0001。
我会稍微修改 LukeH 的解决方案:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
似乎更短且更具可读性。
不要使用可选参数:
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 确实有可选参数。(谷歌也是你的朋友,在这里。)
编辑(因为安东尼佩格拉姆正确,评论)......
是的,这就是你要做的。
但是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
}
甚至是来自慷慨的答案的空值检查/空值参数。
干杯安东尼。
从这个意义上说,C# 没有可选参数。如果您想使其成为addedOn
可选,您应该编写一个不需要该参数的重载,并传递DateTime.Now
给两个参数的版本。