如何使用泛型类型重构几乎重复的方法

时间:2011-08-04 16:23:24

标签: generics .net-3.5 c#-3.0 refactoring

我有一些实际上相同的方法,除了它们具有不同数量的泛型类型参数。内码非常相似:

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>

1 个答案:

答案 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();
相关问题