如何在可选参数中设置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 = addedOn ?? DateTime.Now
。该函数的作用是,如果 addedOn
为 null,则将其设置为当前日期和时间(DateTime.Now
)。 - Zaid Masud我猜你实际上不想要 addedOn = DateTime.Now
,因为这会意味着你永远都拿不到任何结果,因为所有东西都在“现在”之前添加。 :)
可以像这样设置默认的DateTime
:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
我会稍微修改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拥有可选参数。(谷歌也是你的好朋友,在此。)
编辑(因为Anthony Pegram评论的更正)...
是的,这就是你应该这样做的。
但是,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
}
DateTime
“值”作为可选参数的答案。 - adamencyC#在这个意义上没有可选参数。如果您想使addedOn
是可选的,您应该编写一个不需要该参数的重载,并将DateTime.Now
传递给两个参数的版本。
DateTimeConstantAttribute
来实现此操作,但时间跨度不支持此操作。 - leat