我有一些实际上相同的方法,除了它们具有不同数量的泛型类型参数。内码非常相似:
public Set[] CreateSet<TFirst, TSecond>(List<TFirst> first, List<TSecond> second)
{
Set[] result = new Set[2];
result[0] = CreateSet(first);
result[1] = CreateSet(second);
return result;
}
public Set[] CreateSet<TFirst, TSecond, TThird>(List<TFirst> first, List<TSecond> second, List<TThird> third)
{
Set[] result = new Set[3];
result[0] = CreateSet(first);
result[1] = CreateSet(second);
result[2] = CreateSet(third);
return result;
}
...
等等。我有这些方法最多7个泛型类型参数。正如你所看到的,它们实际上完全相同,只是它们创建了不同大小的数组。
我不喜欢这个代码重复,所以可以将这些代码重构为一个私有方法,这些方法可以在内部调用。或者我应该考虑采用其他任何方式来做这个吗? / p>
答案 0 :(得分:1)
也许你可以为集合集创建一个构建器,例如
public class SetCollectionBuilder
{
private readonly List<Set> sets = new List<Set>();
public SetCollectionBuilder Add<T>(List<T> list)
{
this.sets.Add(CreateSet(list));
return this;
}
public Set[] Build()
{
return this.sets.ToArray();
}
}
然后你可以创建一个任意的集合,如:
Set[] result = new SetCollectionBuilder()
.Add(first)
.Add(second)
.Build();