C# 通用问题

标签 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 传递给通用部分??

最佳答案

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

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/

相关文章:

c# - 尝试从命令提示符构建 VS2010 csproj

c# - 删除文件 ://prefix c#

c# - 用子类创建泛型

c# - 根据通用接口(interface)获取类属性

kotlin - 有什么方法可以要求在 kotlin 中的类型参数上添加注释吗?

c# - 如何检查我的解决方案是否包含非托管代码?

c# - 数据绑定(bind)误解

Java 8 Comparator比较静态函数

java - 如何确定注入(inject)的CDI bean的parameterizedType的具体类型

c# - 使用多接口(interface)继承的 typescript 名称冲突/冲突