我试图看看当用户输入一些文本时,它会在数组中搜索任何匹配项,并且从数组中删除任何不匹配的内容;
string search = textBox1.Text;
for (int i = 0; i < staffUsers.Count; i++)
{
if (!(staffUsers[i].staff_name.Contains(search)))
{
staffUsers.Remove(staffUsers[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我的阵列中有一些垃圾名称'Rob Dob','Joe Bloggs','h h','ghg hgh',如果搜索变量最终成为'R',Joe Bloggs会被删除但是'hh'和'ghg hgh'留在那里,但那里根本没有R参与?任何理由>?!
您必须向后迭代才能从数组中删除.每次删除项目时,阵列都会变小.通过倒退,这个事实并不重要.
string search = textBox1.Text;
for (int i = staffUsers.Count - 1; i >= 0 ; i--)
{
if (!(staffUsers[i].staff_name.Contains(search)))
{
staffUsers.Remove(staffUsers[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码的问题在于您在迭代时删除项目.您删除项目,但继续迭代,即使删除项目时数组的大小发生更改.
删除后,您需要重置i值.或者,您需要使用内置来完成繁重的工作:
staffUsers.RemoveAll(i => !(i.staff_name.Contains(search)));
Run Code Online (Sandbox Code Playgroud)
使用一个小的LINQ表达式来完成工作.删除该谓词匹配的所有项目.i表示要将表达式应用于的项目.如果该表达式的计算结果为true,那么它就会消失.