C#运行的时候会报错,在位置5处没有任何行解决方法

C#运行的时候会报错,在位置5处没有任何行
            
         dtbest = dt.Copy();
            dtbest.Clear();
            for (int i = 0; i < P; i++)
            {
                bool first = true;
                for (int j = 0; j < P; j++)
                {
                    double m = double.Parse(dt.Rows[j]["A"].ToString());
                    double n = double.Parse(dt.Rows[i]["A"].ToString());
                    double p = double.Parse(dt.Rows[j]["B"].ToString());
                    double q = double.Parse(dt.Rows[i]["B"].ToString());
                    if (((m < n) && (p < q)) || ((m == n) && (p < q)) || ((m < n) && (p == q)))
                    {
                        first = false;
                        break;
                    }
                }
                if (first == true)
                {
                    dtbest.ImportRow(dt.Rows[i]);

                }

            }
            for (int i = 0; i < dtbest.Rows.Count; i++)
            {
                for (int j = 0; j < dtbest.Rows.Count; j++)
                {
                    if (i != j)
                    {

                        if ((double.Parse(dtbest.Rows[i]["A"].ToString()) == double.Parse(dtbest.Rows[j]["A"].ToString())) && (double.Parse(dtbest.Rows[i]["B"].ToString()) == double.Parse((dtbest.Rows[j]["B"].ToString()))))
                        {
                            dtbest.Rows.RemoveAt(j);
                        }


                    }
                }
            }
  

上面这段代码,第一步贤惠从一个表格里选出符合我需要的组成一个新表格,然后再将表格中重复的删掉(重复的数据只留下一行),运行的时候会在   if ((double.Parse(dtbest.Rows[i]["A"].ToString()) == double.Parse(dtbest.Rows[j]["A"].ToString())) && (double.Parse(dtbest.Rows[i]["B"].ToString()) == double.Parse((dtbest.Rows[j]["B"].ToString()))))这里报错:位置5处没有任何行,看不出来哪里出问题了。请高手指点一下。
------解决思路----------------------
mList.Clear();这句话可以不要,本身就是刚new出来的,里面没东西
mList.Add(j)之前,先判断
if(!mList.Contains(j));
然后不要foreach
你应该for(int i=mList.Count;i>0;i--)
从后往前删,否则
比如你想删除2,3行
你删除了2,原来的3行变成2行,4行变成3行,你再删3,其实是把原来的4删除了