У меня есть следующий код, где я пытаюсь создать универсальную коллекцию для объектов в моем DAL (просто упражнение, а не рабочий код). Моя проблема в том, что я хочу использовать тип, переданный в метод Read (который является частью интерфейса, который реализуют классы).
Я не могу создать new T
, поэтому у меня нет экземпляра объекта для работы, и я не могу объявить его как базовый тип, так как мне нужен метод read, указанный дочерним объектом базового объекта. *
Это действительно возможно, или я лаю не на том дереве?
public class ItemDictionary<T> where T : ILoadable, DataItem
{
public void Load()
{
using (IDataReader reader = SqlHelper.ExecuteReader(_connection, CommandType.StoredProcedure, _proc)) {
Read(reader);
}
}
bool Read(IDataReader reader)
{
while (reader.Read)
{
T item = default(T); //Here be the problem
if (item.Read(reader))
{
this.Add(item.Guid, item);
}
}
return true;
}
}
public class ExampleObject : DataItem, ILoadable
{
bool Read(IDataReader reader)
{
_var1 = reader.getString(0);
_var2 = reader.getString(1);
_var3 = reader.getString(2);
return true;
}
}