首页 新闻 赞助 找找看

动态泛型的问题,如何传入一个动态的类型

0
悬赏园豆:10 [待解决问题]

我定义了一个方法 public void Add<T>(T model) where T : class;

用的时候是这样:

Add<News>(new News(){

  nTitle=“2018”

});

 

Add<Email>(new Email(){

  eTitle=“2018”

});

 

不同的类要写很多代码,工厂模式也要判断类,能否通过一个字符串,就能创建这个Add<T>(T model)里面的那个T和参数model?

YnioBa的主页 YnioBa | 初学一级 | 园豆:4
提问于:2018-04-28 15:55
< >
分享
所有回答(2)
0

你可以直接定义一个扩展类,里面就你需要的类的Add方法

华临天下 | 园豆:1501 (小虾三级) | 2018-04-28 16:18
0

举个例子:

声明一个泛型接口

public interface Ibase_service<T> where T : new()
{

bool Insert(T entity);

}

继承:

public class complaint_service : Ibase_service<complaint>
{

return dal.Insert(null, null, entity);

}

dal里面的泛型接口:

public interface Ibase_dao<T> where T : new()

bool Insert(SqlConnection conn, SqlTransaction trans, T entity);

}

dal里面的方法继承和实现:

public partial class complaint_dao : Ibase_dao<complaint> 
{

    bool Ibase_dao<complaint>.Insert(SqlConnection conn, SqlTransaction trans, complaint model)
    {
    SqlParameter[] parameters;
    string strSql = string.Empty;
    BuildPara(model, out strSql, out parameters, true);

    return Insert(conn, trans, strSql.ToString(), parameters);
    }

}

HI_Hub_MI | 园豆:215 (菜鸟二级) | 2018-04-28 17:00

我发现每次都要传入这个类型吗??  bool Ibase_dao<complaint>.Insert(SqlConnection conn, SqlTransaction trans, complaint model),能否继承一个类,就可以直接保存了。或者别的。

支持(0) 反对(0) YnioBa | 园豆:4 (初学一级) | 2018-05-01 23:32

@YnioBa: 在上面的例子泛型就是实体类型,complaint只是一个例子、再比如User、Role等,对外的话调用的地方都是继承这个接口,调用Insert方法,传入对应的实体就行了。

支持(0) 反对(0) HI_Hub_MI | 园豆:215 (菜鸟二级) | 2018-05-02 16:10

@幻丿辰: 我现在用反射解决了,但是代码比较丑。其实业务是这样的,我们之前都是datatable,传入一个表名就可以查询数据了,现在变成改了orm之后,要传入一个对象,动态的生成对象,并调用里面的泛型。这个时候,就比较麻烦了。

支持(0) 反对(0) YnioBa | 园豆:4 (初学一级) | 2018-05-03 10:20

@YnioBa: 好吧,反正解决方案有多种,能解决问题就行。

支持(0) 反对(0) HI_Hub_MI | 园豆:215 (菜鸟二级) | 2018-05-03 10:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册