2014-09-27 54 views
0

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

我見過一些泛型類型列表,我不知道這是如何工作的。我有點猶豫是否需要使用泛型類型的路線。我想編譯時錯誤,如果你嘗試調用了錯誤類型的傳遞的功能

回答

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

+0

該文檔:http://msdn.microsoft.com/en-us/library/bb384067.aspx – Miebster 2014-09-27 16:39:19

相關問題