如何从C#嵌套List中删除最后一个子列表?
删除嵌套List中最后一个子列表的方法
我创建了一个嵌套List,父列表包含5个子列表,想删除父列表里的最后一个子列表。试了下面的代码:
tableau[tableau.Count - 1].Clear();
但这个操作只清空了子列表里的元素,父列表的计数还是5。还试过用.RemoveAll方法,但不知道该传什么参数。我的嵌套List初始化代码如下:
List<List<string>> tableau = new List<List<string>>(); tableau.Add(new List<string> { "Aard00", "Aard01", "Aard02", "Aard03", "Aard04", "Aard05", "Aard06", "Aard07" }); tableau.Add(new List<string> { "Bard00", "Bard01", "Bard02", "Bard03", "Bard04", "Bard05", "Bard06", "Bard07" }); tableau.Add(new List<string> { "Card00", "Card01", "Card02", "Card03", "Card04", "Card05", "Card06", "Card07" }); tableau.Add(new List<string> { "Dard00", "Dard01", "Dard02", "Dard03", "Dard04", "Dard05", "Dard06", "Dard07" }); tableau.Add(new List<string> { "Eard00", "Eard01", "Eard02", "Eard03", "Eard04", "Eard05", "Eard06", "Eard07" });
核心问题说明
你用的Clear()方法是清空子列表内部的元素,并没有把这个子列表对象从父列表中移除,所以父列表的Count还是5,只是最后一个位置变成了空列表。要删除整个子列表,得用List的元素移除方法。
最直接的方法:RemoveAt
直接根据索引删除最后一个元素,这是最高效的方式:
// 先判断列表不为空,避免索引越界报错 if (tableau.Count > 0) { tableau.RemoveAt(tableau.Count - 1); }
执行后父列表的Count会变为4,原最后一个子列表(Eard开头的那个)会被彻底移除。
其他可选方法
- Remove + Last()
如果你能拿到最后一个子列表的引用,可以用Remove方法:
if (tableau.Count > 0) { tableau.Remove(tableau.Last()); }
注意:如果父列表中有多个完全相同的子列表引用,Remove会删除第一个匹配项,但这里因为取的是Last(),所以只会删除最后一个子列表,没问题。
- RemoveAll的用法(不推荐)
RemoveAll是用来批量删除满足条件的所有元素,其实没必要用它来删单个元素,但如果非要用,可以通过索引判断(需要C# 8.0及以上版本支持带索引的重载):
if (tableau.Count > 0) { tableau.RemoveAll((list, index) => index == tableau.Count - 1); }
这个方法会遍历整个父列表,效率不如RemoveAt,所以不推荐。
内容的提问来源于stack exchange,提问作者Calvin
相关产品推荐
相关产品推荐

