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);
}}
答案 0 :(得分:8)
打印出3个元素,然后打印出错误信息。
答案 1 :(得分:6)
其他答案已经解释了你的错误(我推荐trying not to jump to conclusions about compiler bugs,你可能会被投票)。此外,您将Seq.take与Enumerable.Take进行比较,但they don't have the same behavior。但是,Seq.truncate 与Enumerable具有相同的行为.Take
答案 2 :(得分:4)
第二个for循环根本不执行。第一个输出1 2 3然后抛出异常