我有一个带有几个实体的sqlite类,并且我不想为每种类型的实体创建一个方法,如下所示:
public async List<Sheep> GetSheeps()
{
return database.Table<Sheep>().ToListAsync();
}
public async List<Goat> GetGoats()
{
return database.Table<Goat>().ToListAsync();
}
我想创建一个接口(例如IEntity
)并继承我的绵羊和山羊的POCO类。
然后,我只想创建一种通用方法来获取物品。
这是我尝试过的方法,它说我不能使用T
作为类型:
public async T GetEntities<T>()
{
if (typeof(T) == IEntity)
return database.Table<T>().ToListAsync();
}
也许我不完全了解T
是什么。
任何帮助表示赞赏。
答案 0 :(得分:3)
近...
await
打一个async
电话async
await
模式,因此您需要返回一个Task
T
的列表,因此必须声明List<T>
作为任务的通用参数,即Task<List<T>>
typeof(T) == IEntity
代替检查where T : IEntity
类型代码
public async Task<List<T>> GetEntities<T>() where T : IEntity
{
return await database.Table<T>().ToListAsync();
}
尽管,但要考虑一些事情
IEntity
using
语句(而不保留对它的引用)使用
var myLovelyHorseList = await GetEntities<Horse>();
更新
对我来说,这是一大早,我没喝咖啡,无法测试。但我认为您可能需要new()
约束,并且您的类将必须具有无参数的构造函数
where T : IEntity, new()
答案 1 :(得分:0)
T是类型。
在您的示例中,Sheep
和Goat
都必须是相同的对象类型。
一种实现方法是让Sheep
和Goat
都从空白接口继承。
例如
interface IAnimal {}
public class Goat: IAnimal {}
public class Sheep: IAnimal {}