当我运行此代码时
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
开头)。没有例外。
所以我的问题是,为什么第一个代码段会导致异常?
答案 0 :(得分:2)
在运行where name[0] == '1'
命令之前,实际上不会评估Dump
子句。在此之前,它只是一个延迟执行查询。问题是Util.Cmd
返回的值之一是空字符串,因此您得到IndexOutOfBoundsException