vb.net中的Lambda表达式错误

时间:2012-07-03 11:56:34

标签: vb.net linq

我是这个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中的那个函数上它给了我一个有点错误“表达式不会产生值”

我真的被这个错误所困扰。请求快速回复..

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

来自VB lambda expressions的文档:

  

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

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

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

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