如何解决为什么 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 查询某些东西而不是修改(添加)某些东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。