【问题标题】:Vb.Net action delegate problem?Vb.Net 动作委托问题?
【发布时间】:2010-05-07 06:54:13
【问题描述】:

我是 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) 行得到 “Expression expected.”。当我将其更改为 DoIt = function(s) console.WriteLine(s) 我得到 Expression does not generate a value. 错误。有什么问题?

【问题讨论】:

标签: vb.net action


【解决方案1】:

如果您使用的是 Visual Studio 2008 (VB.NET 9),VB.NET 中有一个限制要求 lambda 表达式返回一个值,因此您不能使用 Sub。这在 VB.NET 10 中发生了变化,因此在该环境中,您的代码应该可以按预期工作。

问题在于,一方面您需要将 lambda 表达式转换为 Function,而不是 Sub,而另一方面 Console.WriteLine 没有返回值。解决方案是将其包装到一个调用Console.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)

【讨论】:

  • 是的,AM 使用 VB 9。但我尝试使用函数而不是 Sub,这也不起作用...抛出“表达式不产生值”错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多