我对C#很新,我遇到了一个我无法找到明确答案的问题。
我有一个基类"实体"。这个课程由几个实体"扩展。目前,我有一个功能,知道如何加载每种不同类型的"实体"来自数据库。我想用一个知道如何加载基类的函数替换所有这些函数"实体"来自数据库。
这是一个知道如何只加载一种类型的函数的例子," TestPlan"类型。
public List<TestPlan> LoadTestPlans()
{
List<TestPlan> testPlans = new List<TestPlan>();
using (ITransaction transaction = session.BeginTransaction())
{
testPlans = (List<TestPlan>)session.CreateCriteria<TestPlan>().List<TestPlan>();
transaction.Commit();
}
return testPlans;
}
我想用这样的东西代替它,但是我无法找出类型铸造的正确咒语。
public List<Entity> LoadEntities(Type entityType)
{
List<entityType> entities= new List<entityType>();
using (ITransaction transaction = session.BeginTransaction())
{
entities= (List<entityType>)session.CreateCriteria<entityType>().List<entityType>();
transaction.Commit();
}
return entities;
}
我看过一些带有通用类型列表的东西,我不确定它是如何工作的。我有点犹豫不决走下通用类型的路线。如果您尝试使用传入的错误类型调用函数,我想要编译时错误。
答案 0 :(得分:1)
您可以使用通用方法:
public List<T> LoadEntities<T>() where T: Entity
{
List<T> entities= new List<T>();
using (ITransaction transaction = session.BeginTransaction())
{
entities= (List<T>)session.CreateCriteria<T>().List<T>();
transaction.Commit();
}
return entities;
}
使用此代码时,您需要提供所需的类型,而不是T
。