3
let a = [1;2;3;]

for i in (a |> Seq.take 10) do Console.WriteLine(i)
for i in (a |> Seq.take 100) do Console.WriteLine(i)

第一行运行良好,但第二行给出错误:输入序列的元素数量不足。

是的,没有 100 个元素,它们只有 3 个,但为什么 10 个有效呢?

在线测试

毕竟它适用于 C#

using System;
using System.Linq;

class P
{ static void Main() {

 var p = new[] {1,2,3,4};

 foreach(var i in p.Take(10).ToArray()) Console.WriteLine(i);
 foreach(var i in p.Take(2).ToArray()) Console.WriteLine(i);
 foreach(var i in p.Take(100).ToArray()) Console.WriteLine(i);
}}

在线测试

4

3 回答 3

8

它打印出 3 个元素,然后打印出错误消息。

于 2011-04-04T12:51:32.280 回答
6

其他答案已经解释了你的错误(我建议不要对编译器错误下结论,你可能会被否决)。此外,您将 Seq.take 与 Enumerable.Take 进行比较,但它们的行为不同。但是, Seq.truncate确实具有与 Enumerable.Take 相同的行为

于 2011-04-04T13:21:58.990 回答
4

在您的示例中,第二个 for 循环根本没有执行。第一个输出 1 2 3 然后抛出异常

于 2011-04-04T12:51:21.597 回答