漏洞 ? 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);
}}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它打印出 3 个元素,然后打印出错误消息。
It's printing out 3 elements and then printing out the error message.
其他答案已经解释了您的错误(我推荐尽量不要急于得出有关编译器错误的结论,你可能会被否决)。另外,您正在将 Seq.take 与 Enumerable.Take 进行比较,但是它们不没有相同的行为。但是,Seq.truncate 确实与 Enumerable.Take 具有相同的行为
Other answers have explained your mistake (and I recommend trying not to jump to conclusions about compiler bugs, you'll probably be downvoted). Also, you're comparing Seq.take with Enumerable.Take, but they don't have the same behavior. However, Seq.truncate does have the same behavior as Enumerable.Take
在您的示例中,第二个 for 循环根本没有执行。第一个输出 1 2 3 然后抛出异常
in your sample second for loop is not executed at all. first one outputs 1 2 3 and then throws exception