Linq to trim IList<string[]> 中的每个单词

Linq to trim each word in IList<string[]>

我知道这个题名不准确,肯定有更好的,但是我的英文不是很好。而且这个问题可能是重复的。 现在任务是读取csv文件,格式如下:

col1, col2
int1, string1
int2, string2

现在想用Linq解析成IList<string[]>,方便以后使用(每一行转成一个对象,各种类型的csv文件很多)。代码如下:

IList<string[]> v = File.ReadAllLines("test.csv").Select(
l => l.Split(new char[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries)
//if add this, cannot compile
//.Select(w => w.Trim())
)
.Skip(1).ToList();

请在注释行上提供帮助。我想 trim 每个单词,以便以后可以将它们转换为整数。但这不会编译(我知道原因可能是Linq将w视为IEnumable<Char>,但我如何仅在一个Linq语句中实现我的目标?

在您最初的尝试中,您在

中遇到了错误
l.Split(new char[] { ',', ',' } ...

因为 ', ' 不能是 单个字符 。你想要这样的东西

IList<string[]> v = File
  .ReadLines("test.csv")
  .Skip(1) // skip titles
  .Select(line => line.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
  .Select(items => items
    .Select(item => item.Trim()) // trim each item 
    .ToArray())
  .ToList();

编辑:Evk 建议的较短版本(请参阅下面的评论)

IList<string[]> v = File
  .ReadLines("test.csv")
  .Skip(1) // skip titles
  .Select(line => line
    .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    .Select(item => item.Trim()) // trim each item 
    .ToArray())
  .ToList();