如何将类型传递给 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();
}
这取决于您的需要,在第一种情况下,每种类型都有一个重载,在第二种情况下,您只有一个方法,并且类型在更高级别指定
我需要做这样的事情:
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();
}
这取决于您的需要,在第一种情况下,每种类型都有一个重载,在第二种情况下,您只有一个方法,并且类型在更高级别指定