我有这个功能
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 传递给通用部分??
最佳答案
您必须使用反射调用该方法。泛型是为编译时已知的类型而设计的;您在编译时不知道类型,因此您必须跳过一些环节。它会是这样的:
MethodInfo method = typeof(WhateverClass).GetMethod("DataPortalFetch");
MethodInfo constructed = method.MakeGenericMethod(new Type[] { _type });
return constructed.Invoke(this, new object[] {parameters, pagesize, pageindex});
细节将取决于它是实例方法还是静态方法,是公共(public)方法还是私有(private)方法等 - 但基本原理是:
- 获取泛型方法定义
- 构造一个具有正确类型的方法(有效地:传递类型参数)
- 调用构造方法
您可能希望将通用方法定义缓存在静态只读字段中,顺便说一句 - 它是可重用的。
关于C# 通用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571487/