是否可以使这些代码有效?:
{{1}}
提前致谢
答案 0 :(得分:2)
您无法使用传统语法(CreateTable<model>
)将变量用作泛型类型。在不知道CreateTable
做什么的情况下,您有两种选择:
不要将CreateTable
作为通用方法,而是将类型作为参数:
public static void CreateTable(Type modelType)
{
}
使用Reflection以使用所需类型动态调用泛型方法:
var methodInfo = typeof (Connection).GetMethod("CreateTable");
foreach (Type model in Models)
{
var genericMethod = methodInfo.MakeGenericMethod(model);
genericMethod.Invoke(null, null); // If the method is static OR
// genericMethod.Invoke(instanceOfConnection, null); if it's not static
}
请注意,反射方式会更慢,因为方法信息不会被解析,直到运行时。
答案 1 :(得分:0)
你可以这样做,
private List<Type> Models = new List<Type>()
{
typeof(LineModel), typeof(LineDirectionModel), typeof(BusStopTimeModel), typeof(BusStopNameModel)
};
void SomeMethod()
{
MethodInfo genericFunction =Connection.GetType().GetMethod("CreateTable");
foreach (Type model in Models)
{
MethodInfo realFunction = genericFunction.MakeGenericMethod(model);
var ret = realFunction.Invoke(Connection, new object[] { });
}
}