我有两种方法:
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
从代码的规范性角度来看,这样做好吗?或者使用 BuildThings 并传递只有一个 Thing 的 IEnumerable 更好吗?还是使用 params?
谢谢。
我有两种方法:
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
从代码的规范性角度来看,这样做好吗?或者使用 BuildThings 并传递只有一个 Thing 的 IEnumerable 更好吗?还是使用 params?
谢谢。
有一件事情你可以做:
BuildThings(params Thing[] things);
这使您能够使用:
BuildThings(thing1, thing2, thing3, ...);
我的个人偏好如下:
界面:
void Build(Thing thing);
void Build(IEnumerable<Thing> things);
void Build(Thing thing)
{
Build(new [] { thing });
}
void Build(IEnumerable<Thing> things)
{
//do stuff
}
params
方式,你必须将任何非数组可枚举转换为数组。在你的方法中,params不是一个好的解决方案。
我认为只要你有一个实现,就可以拥有2个或更多的方法,这样也是可以的。
public void BuildThing(Thing a)
{
this.BuildThings(new List<Thing>(){a});
}
你提供的方法看起来是一个好的实践。当你只构建单个实例而不是多个实例时,可能会有不同的事情要做。
我不会使用params
,因为这会强制你创建一个数组,如果你有一个列表的话。
params
会强制在调用之前枚举集合,而不是在调用内部进行惰性枚举。我会考虑两种情况:
BuildThing(Thing a)
中,我将使用 BuildThings(IEnumerable<Thing> things)
并传递只有一个 Thing 的 IEnumerableparams
的方法。这个选项有一个缺点-如果要传递多个参数,则必须将每个 IEnumerable
转换为 Array
(当然除了数组)。我可能会选择 params
解决方案。