C#类设计有多个参数

时间:2013-02-07 12:29:28

标签: c# class methods

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

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则决定在线下进一步调用什么?

2 个答案:

答案 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;
}

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