在Xamarin中使用SQLite数据库的C#类中的另一个泛型中使用泛型类型
问题描述:
我有一个简单的数据库控制处理程序类。使用SQLiteConnection
。我有我的SQLite数据库中的几个表。在Xamarin中使用SQLite数据库的C#类中的另一个泛型中使用泛型类型
现在我想为所有使用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; }
}
答
看看new Constraint (C# Reference)
public T LoadRecord<T>(int id) where T : TableWithIntId, new()
{
try
{
return (from objTable in sqliteConnection.Table<T>()
where objTable.Id == id
select objTable).First();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}
你需要在'指定'新的()''为约束T'条款where'。 –