代码之家  ›  专栏  ›  技术社区  ›  RameshVel

VB.NET操作委托问题?

  •  4
  • RameshVel  · 技术社区  · 14 年前

    我是vb.net新手。这个问题可能是个新手,以前也有人回答过,但我找不到。我试了一下lambda的功能,结果被打中了。

     Private Function HigerOrderTest(highFunction as Func(Of Int16,Int16)) As Action(of String)
      Dim sam = highFunction(3)    
      Dim DoIt as Action(of String)
      DoIt = sub(s) console.WriteLine(s)            
        return DoIt  
     End Function
    

    我得到了 “需要表达式。” 在第行 doit=sub(s)console.writeline(s) . 当我把它改成doit=function(s)console.writeline(s)时 表达式不产生值。 错误。有什么问题吗?

    1 回复  |  直到 14 年前
        1
  •  7
  •   Fredrik Mörk    14 年前

    如果使用的是visual studio 2008(vb.net 9),则vb.net中有一个限制,要求lambda表达式返回一个值,因此不能使用 Sub . 这在vb.net 10中已经改变,因此在该环境中,您的代码应该按预期工作。

    问题是,一方面,您需要将lambda表达式转换为 Function ,不是 附属的 ,而另一方面 Console.WriteLine 没有返回值。解决方案是将其包装成一个调用 控制台.writeline 返回值:

    Private Function ConsoleWriteLine(ByVal text As String) As String
        Console.WriteLine(text)
        Return text
    End Function
    

    然后可以在lambda表达式中使用该函数:

    Dim DoIt As Action(Of String)
    DoIt = Function(s) ConsoleWriteLine(s)