解决方案 »

  1.   

    用getInfor<T>(DataRow row, Type type)BaoHuGuiHua bhginfor=getInfor<BaoHuGuiHua>(DataRow row, typeof(BaoHuGuiHua));
      

  2.   

    BaoHuGuiHua = 保护规划?
      

  3.   

    不能写=getInfor<BaoHuGuiHua>那个实体名称是会变得,我就是放在那里告诉大家有一个例子
      

  4.   

    对啊
    // 这个tableName是从报文里读取的,现在测试,我直接给个名字
                string tableName = "BaoHuGuiHua";            // 反射获取表名的Type 
                Type type = Assembly.Load("Apt.MWSGR.Domain").GetType("Apt.MWSGR.Domain.Entities." + tableName);
                // 问题就在这,怎么把BaoHuGuiHua这个实体传到下面的泛型里面去,就是大T那点我应该怎么写?
                var exportDataByTableNameQuery = new ExportDataByTableNameQuery<T>();            // 调用方法,获取全部数据
                var exportData = exportDataByTableNameQuery.GetAll();
      

  5.   


    // 这个tableName是从报文里读取的,现在测试,我直接给个名字
                string tableName = "BaoHuGuiHua";            // 反射获取表名的Type 
                Type type = Assembly.Load("Apt.MWSGR.Domain").GetType("Apt.MWSGR.Domain.Entities." + tableName);
                // 问题就在这,怎么把BaoHuGuiHua这个实体传到下面的泛型里面去,就是大T那点我应该怎么写?
                var exportDataByTableNameQuery = new ExportDataByTableNameQuery<T>();            // 调用方法,获取全部数据
                var exportData = exportDataByTableNameQuery.GetAll();
      

  6.   

    如果非要那样写,没办法的,因为这个 T 是编译时候确定的,不是运行时确定的,必须写一个明确的类名,无法动态写成 typeof(...) 的样子。
      

  7.   

    T是编译期类型,这么写是要得不到T,能得到object
                type = typeof(ExportDataByTableNameQuery<>).MakeGenericType(type);
                object exportDataByTableNameQuery = Activator.CreateInstance(type);
                object exportData = type.GetMethod("GetAll", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, new Type[0], null).Invoke(exportDataByTableNameQuery, null);
      

  8.   

    我觉得楼主可以换个思路...既然已经有了tablename作限定..那这个泛型就完全没意义了...
      

  9.   

    另外楼上的代码最好使用var或者dynamic代替object, 否则还是一样...泛型完全失去了意义...
      

  10.   


    嗯,我在我的代码中已经改成var了,这样能获取到正确的数据,你上面提到的换个思路确实可以,我可以在  public class BasicData<T> : ApiController where T:BaseEntity里面为每个实体的公共增加导出功能,这不是为了学习那个Type.MakeGenericType方法,以前写反射都不会用。
      

  11.   

    用TYPE传把,泛型这么传 以前我也试过 每行通
      

  12.   


    您好,那天回复说得到object类型的没怎么注意,现在发现点不出来东西啊。我的exportData返回的是
    public IEnumerable<T> GetAll()
            {
                return this.Session.Query<T>().ToList();
            }
    现在怎么能把object类型编程IList<T>类型的那,还是那个无法把得到的tableName = "BaoHuGuiHua";这个变量传到IList的那个变量里面啊,求指教?
      

  13.   


    我做到现在发现你这句话的意思了,我变成var得到的也是objectl类型,现在就是苦恼怎么把得到的exportData便诶IList<T>的类型那,大T还是传不进去啊
      

  14.   

    都说了T是编译期的,不可能在运行期无中生有,你必须在当前 函数/类型 中定义T。如果你不想或不能定义,你就只能一直使用反射手段来操作你所得到的object,也就只能得到object类型的结果。你只能将object转换成普通类型,而不能转换成未定义的泛型T。比如你的GetAll得到的object不能直接强转成IEnumerable<T>,只能转成IEnumerable。