我创建了以下不会编译的递归lambda表达式,给出了错误
无法从包含“OpenGlobal”的表达式推断出“OpenGlobal”的类型。
Dim OpenGlobal = Sub(Catalog As String, Name As String)
If _GlobalComponents.Item(Catalog, Name) Is Nothing Then
Dim G As New GlobalComponent
G.Open(Catalog, Name)
_GlobalComponents.Add(G)
For Each gcp As GlobalComponentPart In G.Parts
OpenGlobal(gcp.Catalog, gcp.GlobalComponentName)
Next
End If
End Sub
我正在尝试做什么?
答案 0 :(得分:10)
问题是类型推断。它无法确定OpenGlobal变量的类型,因为它取决于它自身。如果您设置了显式类型,则可能没问题:
Dim OpenGlobal As Action(Of String, String) = '...
这个简单的测试程序按预期工作:
Sub Main()
Dim OpenGlobal As Action(Of Integer) = Sub(Remaining As Integer)
If Remaining > 0 Then
Console.WriteLine(Remaining)
OpenGlobal(Remaining - 1)
End If
End Sub
OpenGlobal(10)
Console.WriteLine("Finished")
Console.ReadKey(True)
End Sub