0

我正在尝试使用 Linq 创建一个子列表,但不明白其中的错误。我不认为我做错了,但我认为其他人的眼睛会帮助我解决这个问题。

var dataList = File.ReadAllLines(inputFile);
 dataList = from line in dataList
              let temp = from data in line.Split(';').ToList()
                         where line.Split(';').ToList().IndexOf(data) != 0 ||line.Split(';').ToList().IndexOf(data) != 1
                          select data
                          select string.Join(",",temp);

我收到错误说 IEnumerable 列表不能隐式转换为 string[]..:(

4

3 回答 3

4

dataList是一个数组,而 LINQ 返回IEnumerable<string>. 添加ToArray到查询的末尾:

dataList = (from line in dataList
            let temp = from data in line.Split(';').ToList()
                        where line.Split(';').ToList().IndexOf(data) != 0 || line.Split(';').ToList().IndexOf(data) != 1
                        select data
            select string.Join(",", temp)).ToArray();
于 2013-04-04T07:45:06.800 回答
1

当我尝试编译您发布的代码时,出现以下异常:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“string[]”。存在显式转换(您是否缺少演员表?)

原因是您试图重用 dataList,但 File.ReadAllLines 和 string.Join 方法的返回类型不匹配。这修复了它:

dataList = (from line in dataList
                   let temp = from data in line.Split(';').ToList()
                              where line.Split(';').ToList().IndexOf(data) != 0 || line.Split(';').ToList().IndexOf(data) != 1
                              select data
                   select string.Join(",", temp)).ToArray();

干杯,

于 2013-04-04T07:46:02.110 回答
0

您使用的是哪个版本的 .NET Framework?String.Jointhat take an的重载IEnumerable<string>仅在 v4.0 中引入。如果您使用的是早期版本,它会尝试将IEnumerable<string>其用作string[].

另外(这不能解决您的问题)我认为||第 4 行中的应该是&&.

于 2013-04-04T07:49:09.057 回答