我想用枚举值填充 WinForms Combobox,但是当我尝试使用 Linq 进行此操作时,Combobox 中没有添加任何项目。但是,foreach 变体工作得很好。
我的林克:
Enum.GetNames(typeof(AgeCategory))
.Select(x => cbCategory.Items.Add(x));
Run Code Online (Sandbox Code Playgroud)
我的foreach:
foreach (var category in Enum.GetNames(typeof(AgeCategory)))
{
cbCategory.Items.Add(category);
}
Run Code Online (Sandbox Code Playgroud)
另外,如果您知道更好的方法来做到这一点,我愿意接受不同的解决方案。
Enumerable.Select正在使用延迟执行。这意味着如果您使用 aforeach或其他方法(如ToList/ ),则会执行它ToArray。在此之前,它只是构建查询。
那么为什么编译,你在那里做什么?您必须ComboBox.ObjectCollection.Add查看它不是void(不返回任何内容)而是返回您添加的项目的索引。所以你在这里选择整数,这不是你想要的。
您可以使用这种方法:
cbCategory.Items.AddRange(Enum.GetNames(typeof(AgeCategory)));
Run Code Online (Sandbox Code Playgroud)
根据经验:使用 LIN Q查询某些内容而不是修改(添加)某些内容。
值得一读:LINQ中的延迟执行有什么好处?