我有一个函数,它将string
列表作为参数。
大多数调用只会使用一个字符串,因此,我希望能够传递string
而不是List<string>
,以简化操作。
我用重载实现了这个:
public object foo(string bar)
{
return foo(new List<string> { bar });
}
public object foo(List<string> bar)
{
//Some Code
}
这是实现此目的的正确方法,还是有更简单/最佳实践方法来实现这一目标?
答案 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"})