我有这个通用功能:
public List<T> GetList<T>() {
var businesType = typeof(T);
var databaseType = AutoMapperConfiguration.TypeMapping[businesType];
var databaseEntityList = DataModelAccess.GetEntityList(databaseType);
var businessEntityList = Mapper.Map(databaseEntityList, databaseEntityList.GetType(), typeof(List<T>));
return (List<T>)businessEntityList;
}
但我想要的是,而不是像这样调用DataModelAccess:
DataModelAccess.GetEntityList(databaseType);
是将databaseType作为Generic类型发送,如:
DataModelAccess.GetEntityList<DatabaseType>();
为了返回此方法,例如List<T>
。
谢谢! 附: DataModelAccess.GetEntityList(databaseType)的定义是:
public static List<object> GetEntityList(Type databaseType)
{
//get data from database
//retunt it as List<object> <= and I dont like that
}
答案 0 :(得分:2)
与GetList<T>
非常相似的功能应该为您解决此问题。
public List<T> GetEntityList<T>() { }
然后你可以调用它
typeof(DataModelAccess)
.GetMethod("GetEntityList")
.MakeGenericMethod(databaseType)
.Invoke();
希望这有帮助。
答案 1 :(得分:2)
如果您的GetEntityList
方法返回通用List<object>
但其所有项目都属于单一类型,则可以使用IEnumerable.Cast<T>
将其转换为List<T>
:
List<object> result = DataModelAccess.GetEntityList(databaseType);
List<T> databaseEntityList = result.Cast<T>().ToList();
除此之外,如果不改变该方法,不能以通用方式调用非泛型方法。