Ich habe den folgenden Code, wo ich versuche, eine generische Sammlung für die Objekte in meinem DAL (nur eine Übung, nicht eigentlich Produktionscode) zu erstellen. Mein Problem ist, dass ich die Read-Methode des Typs verwenden möchte (die Teil einer Schnittstelle ist, die die Klassen implementieren).Generische Sammlung wird vom generischen Typ geladen
Ich kann kein new T
erstellen, also habe ich keine Instanz des Objekts, mit zu arbeiten, und ich kann es nicht als Basistyp deklarieren, da ich die vom Kind des Basisobjekts angegebene Lese-Methode brauche.
Ist das wirklich möglich oder bin ich am falschen Baum?
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;
}
}
Genau das, was ich vermisste! Es funktionierte sogar in VB.net :) – Pondidum