/// <summary>
        /// 自动匹配处理.
        /// </summary>
        /// <returns> 匹配后的结果. </returns>
        public override List<AutoMatchResult> GetAutoMatchProcessResult()
        {
            // 预期结果.
            List<AutoMatchResult> resultList = new List<AutoMatchResult>();


            // 遍历 排序后的 可消耗的商品列表.
            foreach (IAutoMatchAble oneItem in BaseDataList)
            {
                if (RemainderValue >= oneItem.GetExpendValue())
                {
                    // 剩余点数大于  商品需要点数.
                    // 构造结果对象.
                    AutoMatchResult oneResult = new AutoMatchResult();
                    // 唯一关键字.
                    oneResult.ID = oneItem.GetID();
                    // 数量.
                    oneResult.Count = Convert.ToInt32(Math.Truncate(RemainderValue / oneItem.GetExpendValue()));
                    // 单个结果加入 结果列表.
                    resultList.Add(oneResult);

                    // 剩余可用点数
                    RemainderValue = RemainderValue - oneItem.GetExpendValue() * oneResult.Count;
                }

            }


            // 返回.
            return resultList;
        }
        /// <summary>
        /// 自动匹配处理.
        /// </summary>
        /// <returns> 匹配后的结果. </returns>
        public override List <AutoMatchResult> GetAutoMatchProcessResult()
        {
            // 预期结果.
            List <AutoMatchResult> resultList = new List <AutoMatchResult>();


            // 遍历 排序后的 可消耗的商品列表.
            foreach (IAutoMatchAble oneItem in BaseDataList)
            {
                if (RemainderValue >= oneItem.GetExpendValue())
                {
                    // 剩余点数大于  商品需要点数.
                    // 构造结果对象.
                    AutoMatchResult oneResult = new AutoMatchResult();
                    // 唯一关键字.
                    oneResult.ID = oneItem.GetID();
                    // 数量.
                    oneResult.Count = Convert.ToInt32(Math.Truncate(RemainderValue / oneItem.GetExpendValue()));
                    // 单个结果加入 结果列表.
                    resultList.Add(oneResult);

                    // 剩余可用点数
                    RemainderValue = RemainderValue - oneItem.GetExpendValue() * oneResult.Count;
                }
            }


            // 返回.
            return(resultList);
        }
        /// <summary>
        /// 自动匹配处理.
        /// </summary>
        /// <returns> 匹配后的结果. </returns>
        public override List <AutoMatchResult> GetAutoMatchProcessResult()
        {
            // 初始化 当前可用值  与 最小余额.
            this.currentMaxValue   = RemainderValue;
            this.minRemainderValue = RemainderValue;


            // 最大可能使用的数量.
            maxTimesArray = new int[this.BaseDataList.Count];

            for (int i = 0; i < maxTimesArray.Count(); i++)
            {
                // 用于存储, 假如积分全部用于购买指定物品, 最多能买几个.
                maxTimesArray[i] = Convert.ToInt32(Math.Truncate(RemainderValue / this.BaseDataList[i].GetExpendValue()));
            }


            // 初始化 当前处理索引.
            currentTimesIndex = new int[this.BaseDataList.Count];

            // 初始化 最小节余使用次数.
            minRemainderUseTimes = new int[this.BaseDataList.Count];



            for (int i = maxTimesArray[0]; i >= 0; i--)
            {
                currentTimesIndex[0] = i;
                GetMinRemainderValue(1);
            }


            List <AutoMatchResult> resultList = new List <AutoMatchResult>();

            for (int i = 0; i < minRemainderUseTimes.Count(); i++)
            {
                if (minRemainderUseTimes[i] > 0)
                {
                    AutoMatchResult oneResult = new AutoMatchResult();
                    oneResult.ID    = BaseDataList[i].GetID();
                    oneResult.Count = minRemainderUseTimes[i];
                    resultList.Add(oneResult);
                    this.RemainderValue = this.minRemainderValue;
                }
            }


            return(resultList);
        }
        public List <AutoMatchResult> DoAutoMatchProcess(decimal currentValue)
        {
            // 节余点数 初始值=当前剩余点数
            RemainderValue = currentValue;


            // 防错性处理代码 1.
            if (BaseDataList == null || BaseDataList.Count == 0)
            {
                // 如果 礼包为空,那么无论你有多少积分,都无法兑换东西。
                // 因为没东西可以兑换.
                // 返回空白列表.
                return(new List <AutoMatchResult>());
            }


            // 将 可消耗的商品列表,按照积分大小,  从高到低排序.
            // 要求的是, 消耗积分数量, 必须大于零.
            // 忽略掉 积分数量小于等于零的错误数据.
            var query =
                from data in BaseDataList
                where data.GetExpendValue() > 0
                orderby data.GetExpendValue() descending
                select data;

            // 商品排序处理.
            BaseDataList = query.ToList();


            // 防错性处理代码 2.
            if (BaseDataList.Count == 1)
            {
                // 预期结果.
                List <AutoMatchResult> resultList = new List <AutoMatchResult>();
                // 如果最后只剩下一个
                // 那就没有任何算法可供选择了
                // 只能选这个商品了。
                IAutoMatchAble oneItem = BaseDataList[0];

                if (RemainderValue >= oneItem.GetExpendValue())
                {
                    // 构造结果对象.
                    AutoMatchResult oneResult = new AutoMatchResult();
                    // 唯一关键字.
                    oneResult.ID = oneItem.GetID();
                    // 数量.
                    oneResult.Count = Convert.ToInt32(Math.Truncate(RemainderValue / oneItem.GetExpendValue()));
                    // 单个结果加入 结果列表.
                    resultList.Add(oneResult);

                    // 剩余可用点数
                    RemainderValue = RemainderValue - oneItem.GetExpendValue() * oneResult.Count;
                }

                // 直接本类处理返回, 不需要其他算法处理了.
                return(resultList);
            }


            // 调用具体类方法, 实现相关处理逻辑.
            return(GetAutoMatchProcessResult());
        }
        public List<AutoMatchResult> DoAutoMatchProcess(decimal currentValue)
        {

            // 节余点数 初始值=当前剩余点数
            RemainderValue = currentValue;


            // 防错性处理代码 1.
            if (BaseDataList == null || BaseDataList.Count == 0)
            {
                // 如果 礼包为空,那么无论你有多少积分,都无法兑换东西。
                // 因为没东西可以兑换.
                // 返回空白列表.
                return new List<AutoMatchResult>();
            }


            // 将 可消耗的商品列表,按照积分大小,  从高到低排序.
            // 要求的是, 消耗积分数量, 必须大于零.
            // 忽略掉 积分数量小于等于零的错误数据.
            var query =
                from data in BaseDataList
                where data.GetExpendValue() > 0
                orderby data.GetExpendValue() descending
                select data;

            // 商品排序处理.
            BaseDataList = query.ToList();


            // 防错性处理代码 2.
            if (BaseDataList.Count == 1)
            {
                // 预期结果.
                List<AutoMatchResult> resultList = new List<AutoMatchResult>();
                // 如果最后只剩下一个
                // 那就没有任何算法可供选择了
                // 只能选这个商品了。
                IAutoMatchAble oneItem = BaseDataList[0];

                if (RemainderValue >= oneItem.GetExpendValue())
                {
                    // 构造结果对象.
                    AutoMatchResult oneResult = new AutoMatchResult();
                    // 唯一关键字.
                    oneResult.ID = oneItem.GetID();
                    // 数量.
                    oneResult.Count = Convert.ToInt32(Math.Truncate(RemainderValue / oneItem.GetExpendValue()));
                    // 单个结果加入 结果列表.
                    resultList.Add(oneResult);

                    // 剩余可用点数
                    RemainderValue = RemainderValue - oneItem.GetExpendValue() * oneResult.Count;
                }

                // 直接本类处理返回, 不需要其他算法处理了.
                return resultList;
            }


            // 调用具体类方法, 实现相关处理逻辑.
            return GetAutoMatchProcessResult();
        }
        /// <summary>
        /// 自动匹配处理.
        /// </summary>
        /// <returns> 匹配后的结果. </returns>
        public override List<AutoMatchResult> GetAutoMatchProcessResult()
        {
            // 初始化 当前可用值  与 最小余额.
            this.currentMaxValue = RemainderValue;
            this.minRemainderValue = RemainderValue;


            // 最大可能使用的数量.
            maxTimesArray = new int[this.BaseDataList.Count];

            for (int i = 0; i < maxTimesArray.Count(); i++)
            {
                // 用于存储, 假如积分全部用于购买指定物品, 最多能买几个.
                maxTimesArray[i] = Convert.ToInt32(Math.Truncate(RemainderValue / this.BaseDataList[i].GetExpendValue()));
            }


            // 初始化 当前处理索引.
            currentTimesIndex = new int[this.BaseDataList.Count];

            // 初始化 最小节余使用次数.
            minRemainderUseTimes = new int[this.BaseDataList.Count];


            


            for (int i = maxTimesArray[0]; i >=0 ; i--)
            {
                currentTimesIndex[0] = i;
                GetMinRemainderValue(1);
            }


            List<AutoMatchResult> resultList = new List<AutoMatchResult>();
            for (int i = 0; i < minRemainderUseTimes.Count(); i++)
            {
                if (minRemainderUseTimes[i] > 0)
                {
                    AutoMatchResult oneResult = new AutoMatchResult();
                    oneResult.ID = BaseDataList[i].GetID();
                    oneResult.Count = minRemainderUseTimes[i];
                    resultList.Add(oneResult);
                    this.RemainderValue = this.minRemainderValue;
                }
            }


            return resultList;
            
        }