我有一个通用功能
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()
可能出现什么问题?
答案 0 :(得分:3)
罪魁祸首就是这条线
databaseFields = list;
其中databaseFields
的类型为List<FieldMaster>
,而list
的类型为List<T>
由于在实际调用函数之前您不知道T
将是什么,因此您不能假设List<T>
类型的某些内容可以分配给{{1}类型的变量}。要么摆脱该函数中的泛型,要么将泛型应用于整个类 - 无论哪种方式,都要确保所有内容都保持相同的类型。
答案 1 :(得分:1)
由于您的方法是通用的,因此您不能像在此处一样将任何通用List类型推送到强类型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);
}
答案 2 :(得分:0)
检查该管理器对象上的GetAddedFields()方法的返回类型。