у меня есть два метода называют 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, но кроме этого у них нет ничего общего.
Я хотел бы удалить дублирование, но я не уверен, как это сделать.
Любые предложения?