我有一个存储库类,我想添加两个方法:
public IEnumerable<OpenCall> OpenCalls()
{
return something;
}
public IEnumerable<OpenCall> OpenCalls(DateTime start, DateTime endd)
{
return something_slightly_different;
}
在每个方法中,我将调用另一个返回平均分辨率列表的方法(AverageResolutions())。显然这种方法还需要采用0个参数或2个参数。我正在做的事情我要么以两个几乎完全相同的OpenCalls()副本或两个几乎相同的AverageResolutions()副本结束,稍微改变以允许DateTime参数。
我认为我做错了 - 我怎么能最终获得一个方法的版本,该方法将接受0或2个参数,然后如果它们为null或不为null则决定在线下进一步调用什么?
答案 0 :(得分:1)
您可以更改方法签名以使用可选参数:
public IEnumerable<OpenCall> OpenCalls(DateTime? start=null, DateTime? end=null)
{
if (start.HasValue && end.HasValue)
{
return something_slightly_different;
}
return something;
}
请注意,您需要使DateTime
- 参数可以为空,否则您将无法设置默认值(必须是编译时常量)。
有关可空类型和语法糖的更多信息(写DateTime?
而不是Nullable<DateTime>
,请参阅MSDN article on Nullable Types
有关可选参数的详细信息,请参阅MSDN article about Named and Optional Arguments。
的Optional Arguments部分答案 1 :(得分:0)
public IEnumerable<OpenCall> OpenCalls()
{
return OpenCalls(null, null);
}
public IEnumerable<OpenCall> OpenCalls(DateTime? start, DateTime? endd)
{
//if (!start.HasValue) ... etc.
return something_slightly_different;
}
如果这个解决方案“聪明”,那取决于你的其他代码。有几十个空检查并不好。如果您只需要检查一次或两次,这可能是一个很好的解决方案。 此外,您可以使用可选参数。