C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for?

如果是foreach,那么恭喜你,你答错了。如果你想到的是用for,那么你只是离成功进了一步。

正确的做法是用for倒序遍历,根据条件删除。下面我们用代码来演示foreach,for删除list数据的情况:

class Program
{
public class Students
{
public string Name { get; set; }
public int Age { get; set; } public Students(string name, int age)
{
this.Name = name;
this.Age = age;
}
} static void Main(string[] args)
{
List<Students> stuList = new List<Students>();
stuList.Add(new Students("Tom",));
stuList.Add(new Students("Tang", ));
stuList.Add(new Students("Tang", ));
stuList.Add(new Students("Trista", ));
stuList.Add(new Students("Lili", )); //打印姓名
Console.Write("删除前:");
foreach (var stu in stuList)
Console.Write(stu.Name + " "); Console.ReadKey();
}
}

打印结果:Tom  Tang  Tang  Trista  Lili

1.先用foreach遍历删除姓名为Tang的学生,代码如下:

foreach (var stu in stuList)
{
if (stu.Name == "Tang")
stuList.Remove(stu);
}

会报如下错误:

因为在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从需导致在foreach中删除元素会出现异常。

2.用for正序遍历删除,代码如下:

//打印姓名
Console.Write("删除前:");
foreach (var stu in stuList)
Console.Write(stu.Name + " "); //删除姓名为Tang的学生
for (int i=;i< stuList.Count;i++)
{
if (stuList[i].Name == "Tang")
stuList.Remove(stuList[i]);
} //打印姓名
Console.Write("\n删除后:");
foreach (var stu in stuList)
Console.Write(stu.Name + " ");

结果:

只删除了一个姓名为Tang的学生。为什么会出现这种情况呢?

这是因为当i=1时,满足条件执行删除操作,会移除第一个Tang,接着第二个Tang会前移到第一个Tang的位置,即游标1对应的是第二个Tang。

接着遍历i=2,也就跳过第二个Tang。

3.用for倒序遍历删除,代码如下:

for (int i = stuList.Count-; i>=; i--)
{
if (stuList[i].Name == "Tang")
stuList.Remove(stuList[i]);
}

结果:

这时删除了全部姓名为Tang的学生。

C#遍历List并删除某个或者几个元素的方法的更多相关文章

  1. js封装删除数组指定的某个元素的方法

    首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { for (var i = ...

  2. Java动态 遍历List 时删除List特征元素 异常问题 及解决方案总结

    首先.这是一个极其简单的问题,大牛可忽略.新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比較困惑,用哪种方式能够安全有 ...

  3. C++容器在遍历时的删除问题

    容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改. 有时要在遍历的同时删除一条数据,但是这样删除的时候程序会导致程序崩溃. 这个问题在GCC 中不会出现,而在VS2008,VS2 ...

  4. ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.

    http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题.     博客分类: 随笔 Javathread ...

  5. Python的list循环遍历中,删除数据的正确方法

    在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...

  6. python 遍历list并删除部分元素

    python 遍历list并删除部分元素https://blog.csdn.net/afgasdg/article/details/82844403有两个list,list_1 为0-9,list_2 ...

  7. 如何边遍历集合边删除元素--使用Iterator中的remove()方法

    在遍历集合时,想将符合条件的某些元素删除,开始是用了下面的方法 public static void main(String[] args) throws UnsupportedEncodingExc ...

  8. 遍历List集合删除元素的出现报错

    遍历List集合删除元素的出现报错   遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...

  9. Python简单遍历字典及删除元素的方法

    Python简单遍历字典及删除元素的方法 这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...

随机推荐

  1. Codeforces Round# 305 (Div 1)

    [Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...

  2. MIB-II

    . 1.3.6.1.2.1

  3. [转] - QThread应用探讨

    QThread 似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用 QThread,随便用google一搜,就能搜出大量结果出来.无怪乎Q ...

  4. php pdo分页

    <table width="95%" border="1" cellspacing="0" cellpadding="0&q ...

  5. c#委托事件及其讲解

    一定要标明出处,波哥的文章.所有文章都值得一看.这篇是摘抄的大白话之C#事件讲解.委托 http://www.cnblogs.com/wudiwushen/archive/2010/04/20/170 ...

  6. php构造函数,引入数据库操作类函数

    <?php /**     * 基于左右值排序的无限分类算法     * 数据库结果为 CREATE TABLE om_catagory (      CatagoryID int(10) un ...

  7. 更新AD对象属性值

    1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...

  8. 通过Powershell开启RDP

    1) Enable Remote Desktop set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Ser ...

  9. 【转载】jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  10. 2016.10.08,英语,《Verbal Advantage》Level1 Unit1-4

    这本书学的很辛苦,总共10个Level,每个Level有5个Unit,每个Unit10个单词,实际上自己差不多一天才能学完1个Unit10个单词.(当然,一天我只能花大约1个小时左右在英语上) 而且跟 ...