簡體   English   中英

如何傳遞類型作為參數,並使用它在函數中聲明變量的類型?

[英]How can I pass in a type as a parameter, and use it to declare the type of variables in my function?

我對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM