方法改泛型

lovebaby 2018-06-17 10:01:42

public void UpdateLicence(Lic_Business_Model Model)
{
var model = Model.MapTo<mc_Lic_Business>();
if(!db.mc_Lic_Business.Any(m=>m.UserID == UserContext.UserID))
{
db.mc_Lic_Business.Add(model);
}
else
{
model.UserID = UserContext.UserID;
db.Entry<mc_Lic_Business>(model).State = EntityState.Modified;
}
db.SaveChanges();
}

上面的方法,类似的要写好多个,不同的只是传进来的类型和MapTo的类型不同,其他的都一样。请教一下,如果改成泛型写法应该怎么写,这样就可以通用,写1个就可以了。
...全文
893 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
比如说写代码
void test<T>(T a) where T : IList
{
    Console.WriteLine("长度是:{0}", a.Count);
}
这就是标题党,为了多态操作明明是传一个 IList 类型的参数就可以了,用什么“泛型”? 如果你只是为了定义 MapTo() 方法,你应该定义接口。要什么泛型?而且 MapTo 方法这里写 <....> 又干什么? 其实如果没有基础,那么高大上的标题党就一下子就不存在了。泛型是用在代码生成模板方面,而不是用在抽象多态方面,这是最起码的区别。
  • 打赏
  • 举报
回复
Lic_Business_Model 应该是一个父类或者说是一个接口。这里说“泛型”其实没什么意义。
巴士上的邂逅 2018-06-17
  • 打赏
  • 举报
回复
EF不熟,是你贴出来的代码中吗? 这样写行不
public void UpdateLicence<T>(dynamic Model)
{
    var model = Model.MapTo<T>();
    if (!db.mc_Lic_Business.Any(m => m.UserID == UserContext.UserID))
    {
        db.mc_Lic_Business.Add(model);
    }
    else
    {
        model.UserID = UserContext.UserID;
        db.Entry<T>(model).State = EntityState.Modified;
    }
    db.SaveChanges();
}
  • 打赏
  • 举报
回复
在你的代码中,使用到了 UserID等等业务知识,所以泛型是标题党,你需要的是按照接口设计代码(把深层次的业务接口写到泛型约束或者参数声明),而不仅仅是知道泛型概念。
lovebaby 2018-06-17
  • 打赏
  • 举报
回复
这部分没问题,主要是EF部分的泛型不知道怎么写
巴士上的邂逅 2018-06-17
  • 打赏
  • 举报
回复
试试这样写行不
public void UpdateLicence<T1,T2>(T1 Model)
        {
            var model = Model.MapTo<T2>();
。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧