1

Je souhaite utiliser une fonction propre pour travailler avec différentes tables de base de données. Comme j'utilise SQLite, les tables sont remplies en utilisant des classes personnalisées. Je suis en train de les remplir récursive donc j'ai créé cette structure et tableau:Utilisation du type générique

public class cCodesPair 
{ 
    public string cCodeKey { get; set; } 
    public Type CommonCodeClass { get; set; } 

    public cCodesPair(string key, Type o) 
    { 
     this.cCodeKey = key; 
     this.CommonCodeClass = o; 
    } 
} 

    private cCodesPair[] codesPairs = new cCodesPair[] 
    { 
     new cCodesPair("DESC_UNITS", typeof(SQLEventUnits)), 
     new cCodesPair("DESC_DISCIPLINE", typeof(SQLDisciplines)), 
     new cCodesPair("DESC_COUNTRY", typeof(SQLCountries)), 
     new cCodesPair("DESC_VIDEOS", typeof(SQLVideos)), 
     new cCodesPair("DESC_ATHLETES", typeof(SQLAthletes)) 
    }; 

L'idée de créer ce, était en boucle à travers le réseau pour créer et interroger la table pour remplir un dictionnaire pour chaque .

La fonction qui essaie de le faire est la suivante:

public void Load<T>(T t, SQLiteConnection conn) where T : Type 
    { 
     try 
     { 
      var query = conn.Table<T>; 

      //MORE CODE... 

     } catch (Exception ex) 
     { 
      Debug.WriteLine("Exception") 
     } 
    } 

La fonction qui boucle dans le tableau et appelle la fonction Load est la suivante:

private async Task fillDictionaries() 
    { 
     for (int i = 0; i < codesPairs.Length; i++) 
     { 
      MasterDescriptions m = new MasterDescriptions(); 
      Type t = codesPairs[i].CommonCodeClass; 
      m.Load(t, conn); 
     } 
    } 

Mais je reçois que la table interrogé a été appelé Type.

Je voudrais obtenir les tableaux SQLEventUnits, SQLDisciplines, etc. dinamiquement. Quelqu'un sait comment? Merci d'avance!

+0

Vous pouvez accomplir cela avec réflexion, mais gardez à l'esprit que cela peut ralentir votre application. – Greg

+0

@Greg pourriez-vous s'il vous plaît fournir un exemple? J'ai utilisé 'Reflection' pour invoquer les constructeurs des types' cCodesPair' eux-mêmes, mais je ne peux pas comprendre comment utiliser Reflection dans ce cas car je ne veux pas appeler de méthodes des types stockés dans la classe . –

+0

Voulez-vous utiliser une table de données? Ou construire un modèle? – Greg

Répondre