我可以将这两个 C# 函数合并为一个吗?

本文关键字:一个 合并 两个 我可以 函数 | 更新日期: 2023-09-27 18:35:53

>我有以下内容:

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

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

我可以将这两个 C# 函数合并为一个吗?

如果在您显示的第一个构造函数中将值设置为 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;
}

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

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 .

您应该保留这两个方法并 DRY 它们。那更糟糕的是。可能:

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);
}