2011-01-11 2 views
0

J'utilise SQLite.cs wrapper pour m'aider avec la base de données et j'ai cette méthode pour créer XML à partir d'une table, qui fonctionne très bien.C# - Type de classe en tant que paramètre dans les méthodes

public void GenerateInvoiceXML(string filePath) { 
     var invoices = app.db.Table<Invoice>().ToList(); 

     XmlSerializer serializer = new XmlSerializer(typeof(List<Invoice>)); 
     TextWriter writer = new StreamWriter(filePath); 

     serializer.Serialize(writer,invoices); 
     writer.Close(); 

} 

Toutes les tables que je sont définis comme ceci:

[Serializable] 
public class Invoice 
{ 

    [PrimaryKey, AutoIncrement] 
    public int Id { get; set; } 
    public string Supplier {get; set;} 
    public string Date {get; set;} 
    public string PaymentMethod {get; set;} 
    public string Notes {get; set;} 

    public Invoice(int newID) 
    { 
     Id = newID; 
    } 
    public Invoice() 
    { 

    } 
} 

Mais je veux changer cette méthode pour quelque chose comme ceci:

public void GenerateInvoiceXML(string filePath, Type table) { 
     var dataForXML = app.db.Table<table>().ToList(); 

     XmlSerializer serializer = new XmlSerializer(typeof(List<table>)); 
     TextWriter writer = new StreamWriter(filePath); 

     serializer.Serialize(writer,dataForXML); 
     writer.Close();  
} 

Est-ce que quelqu'un a une idée de comment fais le?

Cordialement,
Claudio

Répondre

6

Essayez ceci:

public void GenerateInvoiceXML<TTable>(string filePath) { 
    var dataForXML = app.db.Table<TTable>().ToList(); 

    XmlSerializer serializer = new XmlSerializer(typeof(List<TTable>)); 
    TextWriter writer = new StreamWriter(filePath); 

    serializer.Serialize(writer,dataForXML); 
    writer.Close();  
} 

Pour passer un argument de type générique, vous devez être en mesure de préciser une compilation - pour ce faire, vous devez faites votre méthode générique GenerateInvoiceXML comme je l'ai montré ci-dessus.

+2

+1: Si app.db.Table a des contraintes (ce qui est probable), vous aurez également besoin d'ajouter ces contraintes à cette méthode. –

+0

@Reed: Bon point :) –

+0

merci beaucoup. Connaissez-vous un site/référence à ce sujet que je pourrais lire quelque chose de plus? J'ai beaucoup de problèmes avec ça et je ne sais même pas comment le chercher. – Claudio

2

Vous pouvez essayer ceci:

public void GenerateXML<T>(string filePath) 
{ 
    var dataForXML = app.db.Table<T>().ToList(); 
    XmlSerializer serializer = new XmlSerializer(typeof(List<T>)); 
    TextWriter writer = new StreamWriter(filePath); 
    serializer.Serialize(writer,dataForXML); 
    writer.Close(); 
} 
Questions connexes