如何将类型作为参数传入,并使用它来声明函数中变量的类型

本文关键字:类型 声明 变量 函数 参数 | 更新日期: 2023-09-27 18:24:42

我对C#还很陌生,遇到了一个找不到明确答案的问题。

我有一个基类"实体"。这个类由几个"实体"扩展。目前,我有一个函数知道如何从数据库中加载每种不同类型的"实体"。我想用一个知道如何从数据库加载基类"Entity"的函数来替换所有这些函数。

下面是一个函数示例,它只知道如何加载一种类型,即"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;
    }

我看到了一些关于泛型类型List的东西,我不确定它是如何工作的。我有点犹豫是否要走泛型类型的路线。如果您试图用传入的错误类型调用函数,我希望出现编译时错误。

如何将类型作为参数传入,并使用它来声明函数中变量的类型

您可以使用通用方法:

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