微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 foreach 循环有效但 Linq 变体无效?

如何解决为什么 foreach 循环有效但 Linq 变体无效?

我想用枚举值填充 WinForms ComboBox,但是当我尝试使用 Linq 执行此操作时,ComboBox 中没有添加任何项目。但是,foreach 变体工作得很好。

我的 Linq:

Enum.GetNames(typeof(AgeCategory))
    .Select(x => cbCategory.Items.Add(x));

我的 foreach:

foreach (var category in Enum.GetNames(typeof(AgeCategory)))
{
    cbCategory.Items.Add(category);
}

此外,如果您知道更好的方法来做到这一点,我愿意接受不同的解决方案。

解决方法

Enumerable.Select 正在使用 deferred execution。这意味着如果您使用 foreach 或其他方法(如 ToList/ToArray),它会被执行。在此之前,它只会构建查询

那为什么会编译,你在那里做什么?您必须查看 ComboBox.ObjectCollection.Add 才能看到它不是 void(不返回任何内容)而是返回您添加的项目的索引。所以你在这里选择整数,这不是你想要的。

您可以使用这种方法:

cbCategory.Items.AddRange(Enum.GetNames(typeof(AgeCategory)));

作为一个经验法则:使用 LINQ 查询某些东西而不是修改(添加)某些东西。

值得一读:What are the benefits of a Deferred Execution in LINQ?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。