你想要在遍歷集合(例如List)的同時刪除某些元素時,直接在循環中刪除元素可能會導致問題,因為這可能會改變集合的大小和導致索引問題;
可以用for循環的倒序來刪除;
如果要刪除滿足特定條件的所有元素,也可以使用List的RemoveAll方法,它接受一個謂詞(一個返回布爾值的函數),并根據該函數返回true的元素來刪除元素;
下面看一下直接循環刪除;使用for循環的倒序刪除;使用RemoveAll刪除;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace xhdel
{public partial class Form1 : Form{List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 17, 88, 199};public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){textBox1.Text = String.Join(",", numbers);}private void button1_Click(object sender, EventArgs e){for (int i = 0; i < numbers.Count; i++){if (numbers[i] % 2 == 0) // 假設我們要刪除所有偶數{numbers.RemoveAt(i);}}textBox2.Text = String.Join(",", numbers);numbers = new List<int> { 1, 2, 3, 4, 5, 17, 88, 199, 201 };for (int i = numbers.Count - 1; i >= 0; i--){if (numbers[i] % 2 == 0) // 假設我們要刪除所有偶數{numbers.RemoveAt(i);}}textBox3.Text = String.Join(",", numbers);numbers = new List<int> { 1, 2, 3, 4, 5, 17, 88, 199, 303 };numbers.RemoveAll(n => n % 2 == 0);textBox4.Text = String.Join(",", numbers);}}
}
?
在這里看上去直接循環刪除也沒錯;
為保險起見還是使用倒序比較好;
如果滿足條件,使用RemoveAll比較簡潔;