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ラムダ式のドキュメントから:

単一行関数の本体は、ステートメントではなく、値を返す式である必要があります。単一行関数のReturnステートメントはありません。単一行関数によって返される値は、関数本体の式の値です。

コンパイラが言うようにAdd、値を返しません。

の代わりに使用して、複数行バージョンを使用できると思いますが、ここで作業するのに最適な方法ではないと思います。SubFunction

クエリを作成してから、一種の「これらすべてのアイテムを追加」呼び出しを使用する必要があるようです。lb_right残念ながら、タイプ、またはWPF、WinForms、ASP.NETなどを使用しているかどうかさえ教えてくれませんでした。

于 2012-07-03T12:01:27.337 に答える