LINQPad索引超出范围异常

时间:2014-03-04 16:43:45

标签: c# linq linqpad

当我运行此代码时

var res = from name in Util.Cmd (@"dir")
          where name[0] == '1'
          select name;

res.Dump();

我获得了一个目录列表,然后在评估IndexOutofBoundsException行时获得res.Dump()。我希望看到一个目录列表,然后是另一个列表,只显示第一个字符为1的行。

但是,如果我跑:

var res = from name in Util.Cmd (@"dir")
          where name.Length > 1 && name[0] == '1'
          select name;

res.Dump();

我得到了预期的行为(即所有行长度大于1并以1开头)。没有例外。

所以我的问题是,为什么第一个代码段会导致异常?

1 个答案:

答案 0 :(得分:2)

在运行where name[0] == '1'命令之前,实际上不会评估Dump子句。在此之前,它只是一个延迟执行查询。问题是Util.Cmd返回的值之一是空字符串,因此您得到IndexOutOfBoundsException