Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-类类型作为方法中的参数_C# - Fatal编程技术网

C#-类类型作为方法中的参数

C#-类类型作为方法中的参数,c#,C#,我使用SQLite.cs包装器来帮助我处理数据库,我有一个从表中创建XML的方法,这个方法很好用 public void GenerateInvoiceXML(string filePath) { var invoices = app.db.Table<Invoice>().ToList(); XmlSerializer serializer = new XmlSerializer( typeof(List<Invoice>) );

我使用SQLite.cs包装器来帮助我处理数据库,我有一个从表中创建XML的方法,这个方法很好用

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();     
}
public void GenerateInvoiceXML(字符串文件路径,类型表){
var dataForXML=app.db.Table().ToList();
XmlSerializer serializer=新的XmlSerializer(typeof(List));
TextWriter writer=新的StreamWriter(文件路径);
serializer.Serialize(writer,dataForXML);
writer.Close();
}
有人知道怎么做吗

亲切的问候,
克劳迪奥试试这个:

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();     
}
public void GenerateInvoiceXML(字符串文件路径){
var dataForXML=app.db.Table().ToList();
XmlSerializer serializer=新的XmlSerializer(typeof(List));
TextWriter writer=新的StreamWriter(文件路径);
serializer.Serialize(writer,dataForXML);
writer.Close();
}
为了传递泛型类型参数,您必须能够在编译时指定它-为了做到这一点,您必须使您的
GenerateInvoiceXML
方法具有泛型性,如我上面所示。

您可以尝试以下方法:

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();
}
public void GenerateXML(字符串文件路径)
{
var dataForXML=app.db.Table().ToList();
XmlSerializer serializer=新的XmlSerializer(typeof(List));
TextWriter writer=新的StreamWriter(文件路径);
serializer.Serialize(writer,dataForXML);
writer.Close();
}

+1:如果app.db.Table有任何约束(很可能),您还需要将这些约束添加到此方法中。非常感谢。你知道这方面的任何网站/参考资料,我可以阅读更多吗?我在这方面遇到了很多问题,甚至不知道如何搜索。这是我在Jon Skeet的《C深入》中读到的关于C#泛型的最好描述/讨论:。不幸的是,我不知道有任何免费/在线的等价物-买这本书,你不会后悔的。