错误? Seq.take 10效果很好,Seq.take 100不起作用

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);
}}
在线测试     
已邀请:
它打印出3个元素,然后打印出错误信息。     
其他答案已经解释了你的错误(我建议你不要跳到关于编译器错误的结论,你可能会被低估)。此外,您将Seq.take与Enumerable.Take进行比较,但它们没有相同的行为。但是,Seq.truncate与Enumerable.Take具有相同的行为     
在您的示例中,第二个for循环根本不执行。第一个输出1 2 3然后抛出异常     

要回复问题请先登录注册