Рассмотрим этот DAL как код:избавление от аргумента общего типа: возможно ли это?
mDealerTypes = Read<Dictionary<string, DealerType>, DealerType>(
() => { return DALFactory.Instance.ReadDealerTypes(cn); },
(c, o) => c.Add(o.DealerTypeKey, o));
mCountries = Read<Dictionary<string, Country>, Country>(
() => { return DALFactory.Instance.ReadDealerTypes(cn); },
(c, o) => c.Add(o.Code, o));
private C Read<C, T>(Func<SqlConnection, IDataReader> func, Action<C, T> a)
where C : ICollection, new()
where T : EntityBase, new()
{
C objects = new C();
using (IDataReader reader = func(connection))
{
while (reader.Read())
{
T obj = new T();
obj.Init(reader);
a(objects, obj);
}
}
return objects;
}
Для удобства чтения, я хотел бы, чтобы как-то изменить это так объект, который хранится в коллекции не повторяется дважды в списке аргументов типа Рида <>.
mCountries = Read<Dictionary<string, Country>>(
() => { return DALFactory.Instance.ReadDealerTypes(cn); },
(c, o) => c.Add(o.Code, o));
но как переписать Читать <> затем? Возможно ли это?
частный ?? Read (Func FUNC, Action а)
Лично я бы найти его более удобный для чтения, чтобы всегда возвращать плоское перечисление или сбор от метода Dal , тогда вызывающий абонент построит словарь, в вашем случае, вызвав .ToDictionary (o => o.DealerTypeKey). – Joe