假设我有这种方法:
Sub Foo()
Dim ac As Action = Sub()
Console.WriteLine("Aborting")
Exit Sub ' This will exit the Action not the caller method.
End Sub
Console.WriteLine("1")
ac()
Console.WriteLine("2")
Console.WriteLine("3")
Console.WriteLine("4")
End Sub
我正在尝试使用Action
退出调用它的方法(Foo
)。显然,从lambda表达式中调用Exit Sub
将退出动作本身而不是调用方法。
那么,有没有办法从Action的lambda表达式中触发Exit Sub
Foo
?
为什么我要尝试这样做?
好吧,我有一个BackgroundWorker.DoWork
事件,我需要多次触发相同的动作,我不想重复自己。通常的方法是使用所有重复的代码创建一个单独的方法,并在需要时调用方法。好吧,我不能这样做,因为某些“重复代码”无法通过单独的方法调用(例如e.Result = False
& Exit Sub
)。这就是为什么我想到使用Action
这可能不是正确的方法。
还有其他方法可以解决这个问题吗?
修改(2)
基本上,我正在尝试执行以下操作:
If condition1 Then Abort()
If condition2 Then Abort()
If condition3 Then Abort()
而不是:
If condition1 Then
Abort()
Exit Sub
End If
If condition2 Then
Abort()
Exit Sub
End If
If condition3 Then
Abort()
Exit Sub
End If
注意:我无法将condition1
,condition2
和condition3
合并在一起。
答案 0 :(得分:2)
您尝试使用If condition1 Then Abort()
进行的操作不正确。你还想做同样的事情,这是一个解决方法。你甚至可以使用try-catch块一级,即在Foo()之外。如果你想完全退出Foo(),但这取决于你的逻辑。
Sub Foo()
Const EXCP_MSSG_ABORT As String = "Aborting-101"
Try
Dim ac As Action = Sub()
Console.WriteLine("Aborting")
Throw New Exception(EXCP_MSSG_ABORT)
End Sub
Console.WriteLine("1")
ac()
Console.WriteLine("2")
Console.WriteLine("3")
Console.WriteLine("4")
Catch ex As Exception
'Just ignore the exception and exit OR you want to be specific then check the message and exit
'If ex.Message = EXCP_MSSG_ABORT Then
' Console.WriteLine("Exited from Action")
'End If
End Try
End Sub