如何使用LINQ显示拆分后的数组元素?解决控制台输出System.String[]问题
解决方案:正确显示拆分后的字符串元素
哦,这个问题我太熟悉了!你当前的代码里,sequences.Select(s => s.Split(','))返回的是一个包含多个字符串数组的集合,当你直接对这个集合里的元素(也就是每个string[]数组)调用Console.WriteLine时,C#默认会输出对象的类型名称——也就是你看到的System.String[],而不是数组里的具体内容。
下面给你几种实用的解决办法,按需选择:
1. 扁平化所有元素(最常用)
如果你想把所有拆分后的元素一次性逐个输出,不用保留原来的分组,可以用SelectMany代替Select,它会把每个子数组里的元素都提取出来,合并成一个单一的字符串序列:
string[] sequences = {"red,green,blue","orange","white,pink"}; var allWords = sequences.SelectMany(s => s.Split(',')); foreach (var word in allWords) { Console.WriteLine(word); }
运行后会输出:
red green blue orange white pink
2. 嵌套遍历保留分组
如果你想保留原来的分组结构(比如先显示第一组的所有元素,再显示第二组),可以用嵌套循环,外层遍历每个拆分后的数组,内层遍历数组里的单个元素:
string[] sequences = {"red,green,blue","orange","white,pink"}; var allWords = sequences.Select(s => s.Split(',')); foreach (var wordArray in allWords) { // 遍历当前分组里的每个元素 foreach (var word in wordArray) { Console.WriteLine(word); } // 可选:在每组之间加空行分隔 Console.WriteLine(); }
运行后会输出:
red green blue orange white pink
3. 把数组转成字符串后输出
如果想把每组的元素用指定分隔符连起来,一行显示一组内容,可以用string.Join把数组转换成字符串:
string[] sequences = {"red,green,blue","orange","white,pink"}; var allWords = sequences.Select(s => s.Split(',')); foreach (var wordArray in allWords) { // 用空格分隔元素,也可以换成其他符号比如逗号、竖线等 Console.WriteLine(string.Join(" ", wordArray)); }
运行后会输出:
red green blue orange white pink
核心问题就是你原来的遍历对象是数组本身,而不是数组里的单个元素,只要调整遍历的对象或者处理方式,就能正确显示内容啦!
内容的提问来源于stack exchange,提问作者Petar
相关产品推荐
相关产品推荐

