我可以将这两个C#功能合并为一个吗?

时间:2012-05-30 04:26:26

标签: c# linq function

我有以下内容:

    protected SelectList GetReferenceOptions(string pk)
    {
        var options = new SelectList(_reference.Get(pk)
            .AsEnumerable()
            .OrderBy(o => o.Order), "RowKey", "Value");
        return options;
    }

    protected SelectList GetReferenceOptions(string pk, string value)
    {
        var options = new SelectList(_reference.Get(pk)
            .AsEnumerable()
            .OrderBy(o => o.Order), "RowKey", "Value", value);
        return options;
    }

这看起来像我可以组合成一个但我不知道如何处理参数。有人可以通过解释我如何做到这一点来帮助我吗?

3 个答案:

答案 0 :(得分:8)

如果在您显示的第一个构造函数中将value设置为null,那么这将起作用:

protected SelectList GetReferenceOptions(string pk, string value = null)
{
    var options = new SelectList(_reference.Get(pk)
        .AsEnumerable()
        .OrderBy(o => o.Order), "RowKey", "Value", value);
    return options;
}

答案 1 :(得分:0)

您可以引入默认参数,例如:

protected SelectList GetReferenceOptions(string pk, string value=null)
{
    var options = 
         value==null
             ? new SelectList(_reference.Get(pk)
               .AsEnumerable()
               .OrderBy(o => o.Order), "RowKey", "Value")
             : new SelectList(_reference.Get(pk)
               .AsEnumerable()
               .OrderBy(o => o.Order), "RowKey", "Value", value);
    return options;
}

然后通过检查null的默认参数,将两个函数合并为一个。

答案 2 :(得分:0)

你应该保留这两种方法并将它们干掉。那是更多的OOP。可能是:

protected SelectList GetReferenceOptions(string pk)
{
    return GetReferenceOptions(pk, null);
}

protected SelectList GetReferenceOptions(string pk, string value)
{
    return new SelectList(_reference.Get(pk).OrderBy(o => o.Order), 
                          "RowKey", "Value", value);
}