使用变量作为类型

时间:2016-03-04 19:03:57

标签: c#

是否可以使这些代码有效?:

{{1}}

提前致谢

2 个答案:

答案 0 :(得分:2)

您无法使用传统语法(CreateTable<model>)将变量用作泛型类型。在不知道CreateTable做什么的情况下,您有两种选择:

  1. 不要将CreateTable作为通用方法,而是将类型作为参数:

    public static void CreateTable(Type modelType)
    {
    }
    
  2. 使用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
    }
    
  3. 请注意,反射方式会更慢,因为方法信息不会被解析,直到运行时。

答案 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[] {  });
  }
}