2011-02-17 92 views
0

我有一個通用的功能這個C#泛型函數調用有什麼問題?

private void PullDataAndBindGrid<T>(GridView grid, List<T> list) 
{ 
    databaseFields = list; 
    //BindGrid<T>(grid, list); 
} 

其所謂像

private static List<FieldMaster> databaseFields; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     PullDataAndBindGrid<FieldMaster>(FieldsGrid, manager.GetAddedFields()); 
    } 
} 

我也得到編譯時錯誤作爲

無法隱式轉換 型 'System.Collections.Generic.List<T>' 到 'System.Collections.Generic.List<MailCampaign.DAL.FieldMaster> '

更新:
manager.GetAddedFields()的聲明是public List<FieldMaster> GetAddedFields()

出了什麼問題?

回答

1

因爲你的方法是通用的,你不能把任何泛型列表類型爲強類型databaseFields場,你在這裏做:

databaseFields = list; 

你應該重新考慮你的理由使得這種方法一般。如果這是必需的,那麼我建議做一個檢查,以確保你有正確的類型,然後像這樣投射:

private static void PullDataAndBindGrid<T>(List<T> list) 
{ 
    if (list is List<FieldMaster>) 
    { 
     databaseFields = list as List<FieldMaster>;  
    }  
    //BindGrid<T>(grid, list); 
} 
+0

+1:有一個堅定和不屈的需要。這就是爲什麼。 :)是'is`是檢查T類型的最好方法,因爲我需要根據T – naveen 2011-02-17 06:55:53

0

檢查該管理器對象上GetAddedFields()方法的返回類型。

3

罪魁禍首是這條線

databaseFields = list; 

其中databaseFieldsList<FieldMaster>類型,list類型爲List<T>

既然你不知道T會是什麼,直到你真正調用的函數,您不能認爲某種類型的List<T>可以分配給List<FieldMaster>類型的變量。要麼擺脫該功能中的泛型,要麼將泛型應用於整個班級 - 無論哪種方式,都要確保所有內容都保證具有相同的類型。