C#中按指定元素分割字符串列表的实现问题求助
解决字符串列表按'1'分割为子列表的问题
你的代码出现重复子列表的核心问题是始终复用同一个templist实例。在C#中,List<T>是引用类型,当你调用final.Add(templist)时,添加的是该列表的引用而非副本。后续执行templist.Clear()和添加元素的操作,都会修改这个唯一的实例,最终final中的所有元素都指向同一个列表,导致显示内容完全重复。
另外原代码还有一个小问题:判断条件中使用了单引号'1',但你的元素是字符串类型,C#中应该用双引号"1"进行比较,否则会出现类型不匹配的编译警告。
正确实现代码
// 主列表示例(注意元素都是字符串) List<string> mainlist = new List<string> { "1", "2", "2", "3", "1", "2", "3", "4", "4", "1", "2", "2" }; List<List<string>> final = new List<List<string>>(); // 主列表始终以"1"开头,先初始化第一个子列表并加入结果集 List<string> templist = new List<string>(); final.Add(templist); foreach (string log in mainlist) { if (log == "1") { // 遇到新的"1",创建新的子列表实例并加入结果集 templist = new List<string>(); final.Add(templist); } // 将当前元素添加到当前子列表中 templist.Add(log); }
逻辑说明
- 由于主列表以"1"开头,先初始化第一个子列表并加入
final,确保第一个元素能被正确捕获 - 遍历每个元素时,若遇到"1",立即创建新的
List<string>实例,替换当前templist并加入结果集 - 无论当前元素是否为"1",都将其添加到当前的
templist中 - 每个子列表都是独立的实例,互相之间不会产生干扰
运行上述代码后,final的结果将完全符合预期:
["1","2","2","3"]["1","2","3","4","4"]["1","2","2"]
内容的提问来源于stack exchange,提问作者KotAngens
相关产品推荐
相关产品推荐

