Sad*_*egh 80 c# datetime default optional-parameters
如何在可选参数中设置DateTime的默认值?
public SomeClassInit(Guid docId, DateTime addedOn = DateTime.Now???)
{
//Init codes here
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 124
有一种解决方法,利用可空类型和null编译时常量这一事实.(虽然这有点像黑客,我建议避免它,除非你真的不能.)
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
if (!addedOn.HasValue)
addedOn = DateTime.Now;
//Init codes here
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我更喜欢其他答案中建议的标准重载方法:
public SomeClassInit(Guid docId)
{
SomeClassInit(docId, DateTime.Now);
}
public SomeClassInit(Guid docId, DateTime addedOn)
{
//Init codes here
}
Run Code Online (Sandbox Code Playgroud)
小智 32
我想你并不是真的想要,addedOn = DateTime.Now因为那会暗示你永远不会得到任何结果,因为所有内容都会在'Now'之前添加.:)
DateTime可以像这样设置默认值:
public void SomeClassInit(Guid docId, DateTime addedOn = default(DateTime))
Run Code Online (Sandbox Code Playgroud)
更新
如果您处理SQL Server,请不要忘记它不接受默认值(DateTime)是什么是1/1/0001.SQL Server的最小DateTime是1/1/1753(解释).但是SQL的DateTime2接受1/1/0001.
Ale*_*ikh 24
我稍微修改了LukeH的解决方案:
public void SomeClassInit(Guid docId, DateTime? addedOn = null)
{
DateTime TargetDateTimeProperty = addedOn ?? DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)
看起来更短,更易读.
不要使用可选参数:
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
}
Run Code Online (Sandbox Code Playgroud)
.NET 4.0 确实有可选参数。(谷歌也是你的朋友,在这里。)
编辑(因为安东尼佩格拉姆正确,评论)...
是的,这就是你要做的。
但是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
}
Run Code Online (Sandbox Code Playgroud)
甚至来自 munificent's answer 的空检查/空值参数。
干杯安东尼。
| 归档时间: |
|
| 查看次数: |
73762 次 |
| 最近记录: |