现在的位置: 首页 > 综合 > 正文

泛型方法的写法 案例

2013年12月07日 ⁄ 综合 ⁄ 共 1721字 ⁄ 字号 评论关闭

这个泛型方法目的是比较两个list的object对象,把两个list中不一样的对象提取出来。前提条件是在比较前先给他们排序。

/// <summary>
        /// 同步IDC数据
        /// </summary>
        /// <returns></returns>
        public bool SyncIDC()
        {
            try
            {
                List<IDCEntity> videIdcs = DataAccessFacade.Instance.GetVideIDCs();
                List<IDCEntity> vimopIdcs = DataAccessFacade.Instance.GetVimopIDCs();

                var videidcsids = (from item in videIdcs
                                   select item.IDC_ID).ToList();
                var vimopidcsids = (from item in vimopIdcs
                                    select item.IDC_ID).ToList();
                var delvimopidcs = (from item in vimopIdcs
                                    where !videidcsids.Contains(item.IDC_ID)
                                    select item).ToList();
                foreach (IDCEntity idc in delvimopidcs)
                {
                    DataAccessFacade.Instance.DelVimopIDCs(idc.IDC_ID);
                    vimopIdcs.Remove(idc);
                }
                var addvimopidcs = (from item in videIdcs
                                    where vimopidcsids.Contains(item.IDC_ID)
                                    select item).ToList();
                foreach (IDCEntity idc in addvimopidcs)
                {
                    DataAccessFacade.Instance.AddVimopIDCs(idc);
                    vimopIdcs.Add(idc);
                }

                if (videIdcs.Count != vimopIdcs.Count)
                {
                    ICLogger.Instance.Error("奇怪了,应该两个数量是一样的");
                    return false;
                }

                videIdcs.Sort(
                    delegate(IDCEntity a, IDCEntity b)
                    {
                        return a.IDC_ID.CompareTo(b.IDC_ID);
                    }
                    );
                vimopIdcs.Sort(
                    delegate(IDCEntity a, IDCEntity b)
                    {
                        return a.IDC_ID.CompareTo(b.IDC_ID);
                    }
                    );

                List<IDCEntity> differenceIdcs = GetDifferenceObj(videIdcs, vimopIdcs);
                foreach (IDCEntity idc in differenceIdcs)
                {
                    DataAccessFacade.Instance.UpdateVimopIDCs(idc);
                }
            }
            catch (Exception e)
            {
                ICLogger.Instance.Error(e);
                return false;
            }

            return true;
        }

/// <summary>
        /// 比较泛型对象,把不同的数据取出来,用于更新
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="videsource"></param>
        /// <param name="vimopobject"></param>
        /// <returns></returns>
        private List<T> GetDifferenceObj<T>(List<T> videsource, List<T> vimopobject)
        {
            List<T> c = new List<T>();
            for (int i = 0; i < videsource.Count; i++)
            {
                if (!JsonConvert.SerializeObject(videsource[i]).Equals(JsonConvert.SerializeObject(vimopobject[i])))
                {
                    c.Add(videsource[i]);
                }
            }
            return c;
        }

抱歉!评论已关闭.