漏洞 ? Seq.take 10 效果很好,Seq.take 100 不起作用

发布于 2024-10-30 04:43:10 字数 722 浏览 1 评论 0 原文

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);
}}

在线测试

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)

first line works well but second line gives error : The input sequence has an insufficient number of elements.

Yes , there is no 100 elements , they are just 3 but why 10 works then ?

Online test

after all it works on 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);
}}

Online test

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

层林尽染 2024-11-06 04:43:10

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

It's printing out 3 elements and then printing out the error message.

白色秋天 2024-11-06 04:43:10

其他答案已经解释了您的错误(我推荐尽量不要急于得出有关编译器错误的结论,你可能会被否决)。另外,您正在将 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

转身以后 2024-11-06 04:43:10

在您的示例中,第二个 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文