0

我有一个存储库类,我想将两种方法添加到:

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,则进一步调用什么?

4

2 回答 2

1

您可以更改方法签名以使用可选参数:

public IEnumerable<OpenCall> OpenCalls(DateTime? start=null, DateTime? end=null)
{
    if (start.HasValue && end.HasValue)
    {
        return something_slightly_different;
    }
    return something;
}

请注意,您需要使DateTime-parameters 可以为空,否则您将无法设置默认值(必须是编译时常量)。

有关可空类型和语法糖的更多信息(写作DateTime?而不是Nullable<DateTime>参阅关于可空类型的 MSDN 文章

有关可选参数的详细信息,请参阅MSDN 文章中有关命名参数和可选参数的可选参数部分。

于 2013-02-07T12:32:26.713 回答
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;
}

如果这个解决方案“聪明”真的取决于你的其他代码。有几十个空检查并不好。如果您只需要检查一次或两次,这可能是一个很好的解决方案。此外,您可以使用可选参数。

于 2013-02-07T12:33:34.923 回答