废话不多说直接上验证代码,后面增加了两种全部清理的方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ListNestedListClear
{
class Program
{
static void Main(string[] args)
{
List<List<int>> listA = new List<List<int>>();
List<int> listB1 = new List<int>() { 1, 2, 3 };
List<int> listB2 = new List<int>() { 4, 4, 6 };
List<int> listB3 = new List<int>() { 7, 8, 9 };
listA.Add(listB1);
listA.Add(listB2);
listA.Add(listB3);
//------以下代码的打印说明嵌套List,外层List执行Clear后内层的List数据都没有被清理---------------------
Console.WriteLine("清除前开始打印listA中所有的元素:" + listA.Count);
int count1 = 1;
foreach (var itemB in listA)
{
Console.WriteLine(string.Format("listB{0}中所有的元素:", count1++));
foreach (var item in itemB)
{
Console.WriteLine(item);
}
}
listA.Clear();
Console.WriteLine("清除后开始打印listA中所有的元素:" + listA.Count);
int count2 = 1;
foreach (var itemB in listA) //这里面都没有打印,listA.Count = 0;
{
Console.WriteLine(string.Format("listB{0}中所有的元素:", count2++));
foreach (var item in itemB)
{
Console.WriteLine(item);
}
}
Console.WriteLine("清除ListA后开始分别打印listB1中所有的元素:");
foreach (var item in listB1)
{
Console.WriteLine(item);
}
Console.WriteLine("清除ListA后开始分别打印listB2中所有的元素:");
foreach (var item in listB2)
{
Console.WriteLine(item);
}
Console.WriteLine("清除ListA后开始分别打印listB3中所有的元素:");
foreach (var item in listB3)
{
Console.WriteLine(item);
}
//------以上代码的打印说明嵌套List,外层List执行Clear后内层的List数据都没有被清理---------------------
//------全部清理方法1---------------------
//foreach (var itemB in listA)
//{
// itemB.Clear();
//}
//Console.WriteLine("只清理了内层的list后,外层的长度为:" + listA.Count);
//listA.Clear();
//------全部清理方法2---------------------
//List<List<int>>.Enumerator etor = listA.GetEnumerator();
//while (etor.MoveNext())
//{
// etor.Current.Clear();
//}
//Console.WriteLine("只清理了内层的list后,外层的长度为:"+ listA.Count);//输出为3,代表即使每个元素类容都被清理了,但是长度不会变
//listA.Clear();
//Console.WriteLine("外层也清理后,外层的长度为:" + listA.Count);//输出0
-----------清理后的打印,确实都没了
//Console.WriteLine("清除ListA后开始分别打印listB1中所有的元素:");
//foreach (var item in listB1)
//{
// Console.WriteLine(item);
//}
//Console.WriteLine("清除ListA后开始分别打印listB2中所有的元素:");
//foreach (var item in listB2)
//{
// Console.WriteLine(item);
//}
//Console.WriteLine("清除ListA后开始分别打印listB3中所有的元素:");
//foreach (var item in listB3)
//{
// Console.WriteLine(item);
//}
Console.ReadKey();
}
}
}
验证结果发现,内层的list中还有数据: