如何将类型传递给 sqlite-net Table 方法?

How to pass a Type to sqlite-net Table method?

我需要做这样的事情:

private void DoStuff(Type itemType)
{
    var db = new SQLiteConnection(_dbPath);
    var items = db.Table<itemType>();
    // do stuff here...
    db.Close();
}

但是编译器报如下错误:"itemType is a variable but is used like a Type".

Table 的方法签名使用泛型:

public TableQuery<T> Table<T>() where T : new()

非常感谢任何帮助。

itemType是System.Type类型的运行时间变量,不是类型,所以这当然是废话。如果您在编译时知道类型,则通用版本才有意义,即

private void DoStuff(TableType itemType)
{
    var db = new SQLiteConnection(_dbPath);
    var items = db.Table<TableType>();
    // do stuff here...
    db.Close();
}

要将 DoStuff() 应用于不同的类型,您可以使用重载。假设你有一个 class TableType1 映射你的数据库的 Table 和 class TableType2 映射另一个,你可以做

private void DoStuff(TableType1 item)
{
    var db = new SQLiteConnection(_dbPath);
    var items = db.Table<TableType1>();
    // do stuff here...
    db.Close();
}

private void DoStuff(TableType2 item)
{
    var db = new SQLiteConnection(_dbPath);
    var items = db.Table<TableType2>();
    // do stuff here...
    db.Close();
}

或者,您仍然可以使用泛型

private void DoStuff<T>() where T : new()
{
    var db = new SQLiteConnection(_dbPath);
    var items = db.Table<T>();
    // do stuff here...
    db.Close();
}

这取决于您的需要,在第一种情况下,每种类型都有一个重载,在第二种情况下,您只有一个方法,并且类型在更高级别指定