J'ai le code suivant, où j'essaye de créer une collection générique pour les objets dans mon DAL (juste un exercice, pas réellement le code de production). Mon problème est que je veux utiliser le type transmis dans la méthode Read (qui fait partie d'une interface que les classes implémentent). Je ne peux pas créer un new T
donc je n'ai pas une instance de l'objet avec lequel travailler, et je ne peux pas le déclarer comme type de base, car j'ai besoin de la méthode de lecture spécifiée par l'enfant de l'objet de base. Est-ce réellement possible ou est-ce que j'aboie le mauvais arbre?Chargement générique de la collection du type générique
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;
}
}
C'est exactement ce qui me manquait! Il a même travaillé dans VB.net :) – Pondidum