В проекте у меня есть набор классов, которые реализуют абстрактный базовый класс ...
public abstract class BaseClass
{
Guid Id { get; set; }
string Name { get; set; }
string Property { get; set; }
}
public class Foo : BaseClass
public class Bar : BaseClass
/*etc*/
... и для другого класса мне нужно выполнить некоторые манипуляции с ними вколлекция.Единственными вещами, которыми нужно манипулировать, являются члены базового класса.Из-за коллекций довольно сложно написать один метод для каждого типа, и я чувствую, что что-то упустил.Вот что у меня есть:
public ICollection<BaseClass> Transform(ICollection<BaseClass> source, Guid newId, Func<BaseClass> factory)
{
ICollection<BaseClass> result = new List<BaseClass>();
foreach (BaseClass x in source)
{
BaseClass record = factory();
record.Id = newId;
record.Name = x.Name;
record.Property = x.Property;
result.Add(record);
}
return result;
}
public ICollection<Foo> TransformFoos(ICollection<Foo> source, string property)
{
Func<BaseClass> factory = () => new Foo();
ICollection<BaseClass> sourceAsBase = source.Select(x => (BaseClass)x).ToList();
ICollection<Foo> result = this.Transform(sourceAsBase, property, factory)
.Select(x => (Foo)x)
.ToList();
return result;
}
public ICollection<Bar> TransformBars(ICollection<Bar> source, string property)
/*etc*/
Это преобразование LOT .Есть ли лучший способ?