C#通用问题

时间:2009-10-15 10:20:14

标签: c# generics

我有这个功能

public DataSet Fetch(string EntityName, ObjectParameter[] parameters, int pagesize, int pageindex)
    {
        Assembly asm = Assembly.Load("NCR.WO.PLU.ItemEDM");
        Type _type = asm.GetTypes().Where(t => t.Name.Equals(EntityName)).ToList().FirstOrDefault();

        object obj = Activator.CreateInstance(_type);

        return DataPortalFetch<???>(parameters, pagesize, pageindex);
    }

如何将_type传递给通用部分??

1 个答案:

答案 0 :(得分:7)

您必须使用反射调用该方法。泛型是为编译时已知的类型而设计的;你不知道编译时的类型,因此你必须跳过一些箍。这将是:

MethodInfo method = typeof(WhateverClass).GetMethod("DataPortalFetch");
MethodInfo constructed = method.MakeGenericMethod(new Type[] { _type });
return constructed.Invoke(this, new object[] {parameters, pagesize, pageindex});

细节将取决于它是实例方法还是静态方法,无论是公共方法还是私有方法等,但基本要素是:

  • 获取通用方法定义
  • 构造具有正确类型的方法(实际上:传递类型参数)
  • 调用该构造方法

您可能希望将通用方法定义缓存在静态只读字段中,顺便说一下 - 它是可重用的。