【发布时间】:2015-06-17 13:10:45
【问题描述】:
过去我几乎不使用 LINQ。今天尝试使用 LinqPad 编写一个小 LINQ 查询时,出现以下错误:
Operator '==' cannot be applied to operands of type 'char' and 'string'
这是我试图编写的脚本:
void Main()
{
var csvlines = File.ReadAllLines(@"M:\smdr(backup08-06-2015).csv");
var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());
var csvData = csvLinesData.Where(l => (!l[12].Contains("VM") && l[12] != "Voice Mail")).ToArray();
var user = (from r in csvData
orderby r[12]
select new User
{
CSRName = r[12],
Incomming = (from r1 in r
where r1[4] == "I"
select r1).Count(),
outgoing = (from r1 in r
where r1[4] == "O"
select r1).Count()
}).ToList();
user.Dump();
}
class User
{
public string CSRName;
public int Outgoing;
public int Incomming;
public int calltransfer;
}
编辑 1
根据建议我编辑了代码
select new User
{
CSRName=r[12],
Incomming=(from r1 in r
where r1[4]=='I'
select r1).Count(),
outgoing = (from r1 in r
where r1[4] == 'O'
select r1).Count()
}).ToList();
现在它可以编译了,但它抛出了一个不同的错误:
IndexOutOfRangeException: Index was outside the bounds of the array.
我在哪里犯错了?
【问题讨论】:
-
我有点惊讶它没有为你转换它,但如果你只做
r1[4] == 'I'和r1[4] == 'O'(单引号而不是双引号)它是否有效? -
请查看我编辑的部分,因为我现在遇到不同的错误。谢谢
-
您正在尝试访问
r1中的第 13 个 (r1[12]) 和第 5 个 (r1[4]字符。看来 r1 的至少一个值没有那么长。您需要处理这种情况。 -
如何捕捉和处理这种情况?
-
使用调试器。在创建数组的地方设置断点,然后一步一步(F10)观察长度如何变化...