是否正在重载接受字符串或List <string>作为参数的正确方法?

时间:2017-10-03 07:59:35

标签: c# function

我有一个函数,它将string列表作为参数。

大多数调用只会使用一个字符串,因此,我希望能够传递string而不是List<string>,以简化操作。

我用重载实现了这个:

public object foo(string bar)
{
    return foo(new List<string> { bar });
}

public object foo(List<string> bar)
{
    //Some Code
}

这是实现此目的的正确方法,还是有更简单/最佳实践方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

是的,你拥有的很好。这就是运算符重载的目的。

FWIW,如果大多数调用只使用一个字符串,如果可能的话,我会采取另一种方式。此外,我还会使用最常用的界面来完成这项工作。

public object foo(string bar)
{
    //Some code
}

public object foo(IEnumerable<string> bar)
{
    foreach (var s in bar) foo(s);
}

或者可能:

public object foo(string bar)
{
    //Some code
}

public IEnumerable<object> foo(IEnumerable<string> bar)
{
    return bar.Select(a => foo(a));
}

但是,让我们说扭转换行顺序是一个坏主意(正如一些评论者建议的那样)。这是避免编写第二个原型的有趣方法:添加辅助扩展方法。

//Helper extension method
public static IEnumerable<T> ToEnumerable<T>(this T item)
{
    yield return item; 
}


//Then just have one prototype
public object foo(List<bar>)
{
    //some code
}

//But call it like this if you want
var result = foo(bar.ToEnumerable());

但是,如果你只是想拥有两个原型,那也就是fleek的手提包。

答案 1 :(得分:1)

params怎么样?

public object foo(params string[] bar)
{
    //impl
}

你可以这样称呼它:foo("abc")或者像这样:foo(new []{"abc","xyz"})