• 在实际业务中用一个简单泛型,以及父子类的转换


    这几天回去看了下之前的项目源码,发现极为粗制滥造,CRUD成了习惯后,技术很容易停滞不前,大部分时间用在了CV上,代码复制过来就用,也不加一改动、抽象、封装下。

    这里举一个小例子。

    有三个业务功能,材料计划,材料申请,采购计划。都有工作流参与,需要记录每一步中材料的数量和变化。共有属性:材料名称,材料数量,材料价格,之前的做法就是直接CV几个函数,分别对应每个计划的处理。其实认真分析后,可以发现大部分属性是共有的,设计如下。(笔记本没装PDM,用EXCEL画了)

    ,明细表,记录每一步的原始数据,,变动表,记录每一步的数据变化,需要和上一步的对比。

    1 这里先列出明细的基类和材料计划的子类

     1 public class TBL_Detail
     2     {
     3         public TBL_Detail()
     4         {
     5         }
     6 
     7         public string Id { get; set; }
     8         public string CLID { get; set; }
     9         public string Name { get; set; }
    10         public decimal Num { get; set; }
    11         public string Price{ get; set; }
    12         public string Step { get; set; }
    13         public string JHID { get; set; }
    14         
    15     }
    View Code
    1 public class TBL_Detail_CLJH : TBL_Detail
    2     {
    3         public TBL_Detail_CLJH()
    4         {
    5         }
    6 
    7         //可添加实际的属性
    8     }
    View Code

    2 定义一个方法,用于将子类转换为父类。

    1 public static List<TBL_Detail> getDetailFromChild<T>(List<T> list) where T : TBL_Detail
    2         {
    3             List<TBL_Detail> list_detail = new List<TBL_Detail>();
    4             foreach (T item in list)
    5             {
    6                 list_detail.Add((TBL_Detail)item);
    7             }
    8             return list_detail;
    9         }
    View Code

    这里泛型表示参数类型限制为 派生自明细表基类(TBL_Detail)的子类,循环中将子类装箱为父类。

    调试代码:

     1 static void Main(string[] args)
     2         {
     3             List<TBL_Detail_CLJH> list1 = new List<TBL_Detail_CLJH>();
     4             TBL_Detail_CLJH oned = new TBL_Detail_CLJH();
     5             for (int i = 0; i < 3; i++)
     6             {
     7                 oned = new TBL_Detail_CLJH();
     8                 oned.Id = "Id" + i;
     9                 oned.Name = "Name" + i;
    10                 list1.Add(oned);
    11             }
    12 
    13             List<TBL_Detail> list = getDetailFromChild(list1);
    14             Console.WriteLine("类型1");
    15             Test(list);
    16             Console.Read();
    17         }
    View Code

    3,加入TBL_Change变化表的处理,这里扩展下泛型参数的方法,让它可以支持多个泛型参数就可以了。

     1 public static List<TBL_Detail> getDetailFromChild<T,U>(List<T> list, List<U> list_change) 
     2             where T : TBL_Detail 
     3             where U : TBL_Change
     4         {
     5             List<TBL_Detail> list_detail = new List<TBL_Detail>();
     6             foreach (T item in list)
     7             {
     8                 list_detail.Add((TBL_Detail)item);
     9             }
    10             return list_detail;
    11         }
    View Code

    如果还要加参数,在<T,U>里边继续添加即可,别忘了添加约束。

  • 相关阅读:
    JZ5 替换空格
    数学分析 H 1 复习要点(部分)
    算法贪心
    Python之位运算
    sorted复杂排序cmp_to_key
    算法位运算
    Python3新特性总结 持续更新
    算法树
    H5 ios端微信浏览器下底部工具固定方法
    Eclipse 安装windows10环境
  • 原文地址:https://www.cnblogs.com/cad2/p/10208697.html
Copyright © 2020-2023  润新知