【发布时间】:2017-12-18 09:51:53
【问题描述】:
我有一个简单的数据库控件处理程序类。
它使用SQLiteConnection。我的 SQLite 数据库中有几个表。
现在我想为使用 int Id 作为主键的特定类型的所有表编写一个通用的简单访问器函数。因此,我有一个基类 TableWithIntId,它始终以 int Id 作为主键。
我的简化代码是:
private SQLiteConnection sqliteConnection;
public T LoadRecord<T>(int id) where T : Database.TableWithIntId
{
try
{
return (from objTable in sqliteConnection.Table<T>()
where objTable.Id == id
select objTable).First();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
问题是,我收到以下错误:
错误 CS0310:“T”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“SQLiteConnection.Table()”中的参数“T”
这让我很困惑,因为 T 不是抽象的并且有一个自动的默认构造函数。
public class TableWithIntId
{
[PrimaryKey]
public int Id { get; set; }
}
【问题讨论】:
-
您需要在
where子句中为T指定new()约束。
标签: c# sqlite generics xamarin