在可选参数中设置DateTime的默认值
如何在可选参数中设置DateTime的默认值?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???) { //Init codes here }
有一个解决方法,利用可空types和null
是一个编译时常量的事实。 (虽然这有些破绽,但我build议避开它,除非你真的做不到。)
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的解决scheme:
public void SomeClassInit(Guid docId, DateTime? addedOn = null) { DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now; }
这看起来更短,更可读。
我想你并不是真的想要addedOn = DateTime.Now
因为这会build议你永远不会得到任何结果,因为所有的东西都会在'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确实有可选的参数 。 ( 谷歌也是你的朋友 ,在这里)
编辑(因为安东尼·佩格拉姆正确,评论)…
是的,这就是你将如何做到这一点。
但是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 }
或者甚至是来自macros伟的答案的空检查/空值参数。
干杯安东尼。
C#在这个意义上没有可选参数。 如果你想addedOn
可选项,你应该写一个不需要该参数的重载,并将DateTime.Now
传递给双参数版本。