将(T)的类型转换为T

本文关键字:类型转换 | 更新日期: 2023-09-27 18:29:59

我有一个通用函数:

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

以便像CCD_ 1一样返回该方法。

谢谢!附言:DataModelAccess.GetEntityList(数据库类型)的定义是:

public static List<object> GetEntityList(Type databaseType)
{
    //get data from database
    //retunt it as List<object> <= and I dont like that
}

将(T)的类型转换为T

一个非常像GetList<T>的函数应该可以为您解决这个问题。

public List<T> GetEntityList<T>() { }

然后你可以调用它

typeof(DataModelAccess)
    .GetMethod("GetEntityList")
    .MakeGenericMethod(databaseType)
    .Invoke();

希望这能有所帮助。

如果GetEntityList方法返回一个泛型List<object>,但它的所有项都是单一类型,则可以使用IEnumerable.Cast<T>将其转换为List<T>:

List<object> result = DataModelAccess.GetEntityList(databaseType);
List<T> databaseEntityList = result.Cast<T>().ToList();

除此之外,不,您不能在不更改非泛型方法的情况下以泛型方式调用该方法。