linq lambda表达式中的声明

时间:2016-09-14 06:58:40

标签: vb.net lambda

我有一个列表,这是我的一些ComboBox中的SelectedValue。

 Dim AppsInt = MyApps.CheckedItems.Select(Function(x) Convert.ToInt32(x.Value)).ToList()

我有这个对象是(t)的列表

 Dim myObj = New List( Of Item )
 Dim FooItem = New item ( 42 )

我想要的是将我的Int列表放入我的对象中。在C#中看起来像这样的东西:

AppsInt.foreach( x => myObj .add(new Item(x) ) ) ;

到目前为止,我所做的是向我发送“不产生结果”错误:

AppsInt.ForEach( Function(it) myObj.Add(New Item(it)) )

我该怎么办?如何让这个linq lambda工作?

2 个答案:

答案 0 :(得分:2)

你应该将功能(it)改为sub(it)。 或者:

Dim myObj = AppsInt.Select( Function(it) New Item(it)).ToArray()

答案 1 :(得分:1)

ForEach表达式中的Lambda表达式不会返回任何结果(编译器会向您说明)。这意味着您有两种方法可以解决它:

  1. 将return语句添加到将返回任何内容的lamda表达式中:

    AppsInt.ForEach(Function(it) 
               myObj.Add(New Item(it))
               Return 1 ' it's not matter what you will return here.
           End Function)
    
  2. Function(it)更改为Sub(it)Sub没有义务返回任何价值。

  3. 更优选第二种选择。