我有两个方法称为Run
看起来几乎一模一样的作品,但它们与不同类型的工作:删除重复代码的方法看起来相同,但不同类型的
public string Run<T>(IEnumerable<T> items)
{
// ... Code
var serializer = new ObjectSerializer<T>();
var headers = serializer.SerializeHeaders(items);
// ... Code
foreach (var item in items)
{
var values = serializer.SerializeValues(item);
// ... Code
}
// ... Code
}
public string Run<T>(IEnumerable<Wrapper<T>> items)
{
// ... Code
var serializer = new ObjectWrapperSerializer<T>();
var headers = serializer.SerializeHeaders(items);
// ... Code
foreach (var item in items)
{
var values = serializer.SerializeValues(item);
// ... Code
}
// ... Code
}
public class ObjectSerializer<T>
{
public string[] SerializeHeaders(IEnumerable<T> items) { ... }
public string SerializeValues(T item) { ... }
}
public class ObjectWrapperSerializer<T>
{
public string[] SerializeHeaders(IEnumerable<Wrapper<T>> items) { ... }
public string SerializeValues(Wrapper<T> item) { ... }
}
所有// ... Code
部分是在两种方法相同。 Wrapper<T>
有一个T的实例,但除此之外它们没有任何共同之处。
我想删除重复,但我不知道该怎么做。
有什么建议吗?