2011-01-11 10 views
0

私はデータベースを手助けするためにSQLite.csラッパーを使用しています。このメソッドは正常に動作しているテーブルからXMLを作成するためのメソッドです。C# - メソッドのパラメータとしてのクラスの型

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(); 

} 

私はこのように定義されているすべてのテーブル:

[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() 
    { 

    } 
} 

しかし、私はこのような何かのために、この方法を変更したい:

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();  
} 

誰がどのようにアイデアを持っていますそれ?

種類よろしく、
クラウディオ

答えて

6

この試してみてください:あなたはそれをコンパイル時間を指定することができなければならないジェネリック型引数を渡すために

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();  
} 

を - あなたがする必要があります。これを行うために、上に示したように、GenerateInvoiceXMLメソッドを一般的にしてください。

+2

1:app.db.Table は(そうである)任意の制約がある場合、あなたはまた、同様にこの方法にそれらの制約を追加する必要があります。 –

+0

@Reed:良い点:) –

+0

ありがとう。これについて私が何かもっと読むことができるサイト/リファレンスを知っていますか?私はこれに多くの問題を抱えているし、それを探し出す方法も知らない。 – Claudio

2

あなたはこれを試すことができます。

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(); 
} 
関連する問題