// 反射的经典实现,变量的反复抽象,把变化部分减少到最小,增强稳定部分,有利于扩展
 private List<MatchPoint<float>> ployfitSeries(List<MatchPoint<int>> result, int LastNowDiff)
 {
     List<MatchPoint<float>> fitseries = new List<MatchPoint<float>>();
     //在此反射数据系列,计算需要拟合的成员,由于输入和输出的数据类型不同,使用泛型<>,T
     PropertyInfo[] field = typeof(MatchPoint<>).GetProperties();
     int size = result.Count();
     var fisfilter = field.Where(e => e.Name == "LastMatchWDL" || e.Name == "LastMatchGoals" || e.Name == "LastMatchOddEven");
     foreach (PropertyInfo fi in fisfilter)
     {
         double[] Y = new double[size];
         double[] X = new double[size];
         double[] X1 = new double[size];
         for (int i = 0; i < size; i++)
         {
             //在此指定<>类型是整数
             PropertyInfo fiIn = typeof(MatchPoint<int>).GetProperty(fi.Name);
             //反射获取值
             Y[i] = Convert.ToDouble(fiIn.GetValue(result[i], null));
             X[i] = Convert.ToDouble(result[i].LastMatchOverTime);
             if (i != size - 1)
                 X1[i] = Convert.ToDouble(result[i + 1].LastMatchOverTime);
             else
                 X1[i] = Convert.ToDouble(LastNowDiff);
             MatchPoint<float> f = new MatchPoint<float>();
             f.LastMatchOverTime = (float)X1[i];
             if (fitseries.Count == i) fitseries.Add(f);  //如果累加就不行,这种方式,最大值不超过i
         }
         myCurveFitclass mmm = new myCurveFitclass(X, Y);
         mmm.CurvefitValue(LastNowDiff);
         //在此指定<>类型是小数
         PropertyInfo fiOut = typeof(MatchPoint<float>).GetProperty(fi.Name); //这里改属性
         //反射设定值 
         for (int j = 0; j < mmm.PredictionsNew.Length; j++) { fiOut.SetValue(fitseries[j], (float)mmm.PredictionsNew[j], null); }
     }
     return fitseries;
 }
 public void initCurveFit()
 {
     if (Top20Count > 10)
     {
         CurveFit = ployfitSeries(ListMatchPointData, NowMatchTimeDiff);
         CurveFitValue = CurveFit.Last();
     }
 }