1

我是这个 linq 东西的新手。我以前从未使用过任何 linq。因此,当我有一个将选定项目从左侧列表移动到右侧列表的场景时,我从 C# 中的搜索中获得了一个不错的解决方案,但我将其转换为 VB。这是我得到的代码

Dim leftItems = lb_left.Items.Cast(Of ListItem)().ToList()

Dim rightItems = lb_right.Items.Cast(Of ListItem)().ToList()

'Get all selected items from left box

Dim LeftSelectedItems = leftItems.Where(Function(a) a.Selected).ToList()

'Add all selected items to right box
 'Clear lb_right Items and add sorted list

lb_right.Items.Clear()

LeftSelectedItems.Union(rightItems).OrderBy(Function(a) a.Text).ToList().ForEach(Function(b) lb_right.Items.Add(b))

'Remove all selected items from left box

LeftSelectedItems.ForEach(Function(a) lb_left.Items.Remove(a))

以上是我从互联网上获得的从左到右移动列表框的代码。但是在那个函数上ForEach它给了我一个错误“表达式不产生值”

我真的被这个错误困住了。请求您的快速回复..

4

2 回答 2

8
LeftSelectedItems.ForEach(Sub(a) lb_left.Items.Remove(a))
于 2012-07-03T12:02:57.623 回答
1

VB lambda 表达式的文档中:

单行函数的主体必须是返回值的表达式,而不是语句。单行函数没有 Return 语句。单行函数返回的值是函数体中表达式的值。

正如编译器所说,Add不返回值。

我相信您可以使用Sub而不是Function, 并使用多行版本 - 但我认为这不是在这里工作的最佳方式。

看起来您应该创建一个查询,然后使用一种“添加所有这些项目”调用。不幸的是,您没有告诉我们 的类型lb_right,甚至您是否使用 WPF、WinForms、ASP.NET 等。

于 2012-07-03T12:01:27.337 回答