0

只需要这样做,它就会在用户设置的阈值下从列表(记录)中删除记录 c# 表单

这是我的代码,任何建议或帮助都很棒,它仅用于 uni 作业,所以还没有学到很多东西谢谢

 private void FindAndDeleteByCash()
 {
      for (int i = 0; i < records.Count; i++)
      {  
           if (CreditCheckBox.Checked == true)
           {
                if (Convert.ToDouble(BalanceRequired.Text) > records[i].CreditBalance)
                {
                     records.Remove(records[i]);
                }
           }
      }    
 }   
4

3 回答 3

3

由于每次删除后都会records.Count 更改,因此会出错。如果您将其更改为向后循环,则可以修改内部for 循环for(int i = 0; i < records.Count; i++)

 private void FindAndDeleteByCash() {
   for (int i = records.Count - 1; i >= 0; --i) // <- Backward loop
     if (CreditCheckBox.Checked && (Convert.ToDouble(BalanceRequired.Text) > records[i].CreditBalance))
       records.Remove(records[i]); // <- records.RemoveAt(i); looks better here
 }    
于 2013-09-09T06:29:03.107 回答
0

records.Count在你的循环中改变了,所以你可能想把它放在循环之外。

此外,您可以将if语句加入 1:

    private void FindAndDeleteByCash()
    {
        int recCount = records.Count;

        for (int i = 0; i < recCount; i++)
        {  
            if (CreditCheckBox.Checked == true &&
                 Convert.ToDouble(BalanceRequired.Text) > records[i].CreditBalance)
            {
                    records.Remove(records[i]);
            }
         }    
    }   
于 2013-09-09T05:36:51.857 回答
0

对于框架 3.5 或更高版本:(未经测试)

 private void FindAndDeleteByCash()
 {
      Double balance = Convert.ToDouble(BalanceRequired.Text);

      if(CreditCheckBox.Checked == true)
      {
          var rec =  records.Where((rec) => rec <= balance) // Using LINQ
          // print 'rec' to verify, it will contain only related result sets.
      }  
 }   
于 2013-09-09T07:33:25.547 回答