将typeof(T)转换为T.

时间:2016-01-12 07:38:56

标签: c# list generics

我有这个通用功能:

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
}

2 个答案:

答案 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();

除此之外,如果不改变该方法,不能以通用方式调用非泛型方法。