Vb.net 重构可能返回返回值的函数

Vb.net 重构可能返回返回值的函数,vb.net,refactoring,return,Vb.net,Refactoring,Return,我正在处理一个非常大的函数中的一些旧代码,我需要编写一个新函数,从旧函数调用几次。此新函数将提供有关我是否需要在旧函数的早期返回的信息 我的问题是什么是更直接或更好的方式来完成下面的内容?我如何重构它 我想另一种提问方式是..返回的更好方式是什么 Public Class ExampleClass ''' <summary> ''' This function calls another function ''' </summary> ''' <returns&g

我正在处理一个非常大的函数中的一些旧代码,我需要编写一个新函数,从旧函数调用几次。此新函数将提供有关我是否需要在旧函数的早期返回的信息

我的问题是什么是更直接或更好的方式来完成下面的内容?我如何重构它

我想另一种提问方式是..返回
的更好方式是什么

Public Class ExampleClass

''' <summary>
''' This function calls another function
''' </summary>
''' <returns></returns>
Protected Overridable Function FunctionOne() As Boolean
    FunctionOne = False
    Dim lobjOne, lobjTwo, lobjThree As Object
    Dim lblnExit As Boolean = False
    '
    ' Some logic here (manipulates/gets objects)
    '
    lblnExit = FunctionTwo(lobjOne, lobjTwo)
    If lblnExit Then
        Return lblnExit
    ElseIf lobjOne.This.That > 2 Then
        Return lblnExit
    End If
    '
    ' Some more logic here (manipulates objects)
    '
    lblnExit = FunctionTwo(lobjOne, lobjTwo)
    If lblnExit Then
        Return lblnExit
    ElseIf lobjOne.This.That > 2 Then
        Return lblnExit
    End If
    '
    ' Performing some final actions
    '
End Function


''' <summary>
''' This function is called by FunctionOne Multiple Times
''' </summary>
''' <returns></returns>
Protected Overridable Function FunctionTwo(ByVal pobjOne As Object, ByVal pobjTwo As Object) As Boolean
    FunctionTwo = False
    '
    ' Performing some long complicated checking that either Returns true or exits
    '
End Function

End Class
公共类示例类
''' 
''此函数调用另一个函数
''' 
''' 
受保护的可重写函数FunctionOne()为布尔值
函数一=假
Dim lobjOne、lobjTwo、lobjThree作为对象
Dim lblnExit为布尔值=False
'
'这里有一些逻辑(操作/获取对象)
'
lblnExit=功能二(lobjOne,lobjTwo)
如果lblnExit那么
返回lblnExit
ElseIf lobjOne.This.That>2
返回lblnExit
如果结束
'
'这里有更多的逻辑(操作对象)
'
lblnExit=功能二(lobjOne,lobjTwo)
如果lblnExit那么
返回lblnExit
ElseIf lobjOne.This.That>2
返回lblnExit
如果结束
'
"做一些最后的动作",
'
端函数
''' 
''FunctionOne多次调用此函数
''' 
''' 
受保护的可重写函数FunctionTwo(ByVal pobjOne作为对象,ByVal pobjTwo作为对象)作为布尔值
函数二=假
'
'执行一些长时间复杂的检查,要么返回true,要么退出
'
端函数
末级

您可以稍微简化条件逻辑

lblnExit = FunctionTwo(lobjOne, lobjTwo)
If lblnExit Or lobjOne.This.That > 2 Then
    Return lblnExit
End If

通过将
FunctionTwo
调用和结果检查封装在lambda表达式中,可以避免重复的条件逻辑:

Protected Overridable Function FunctionOne() As Boolean
    FunctionOne = False
    Dim lobjOne, lobjTwo, lobjThree As Object
    Dim lblnExit As Boolean = False
    Dim functionTwoEx =
        Function()
            lblnExit = FunctionTwo(lobjOne, lobjTwo)
            Return lblnExit OrElse lobjOne.This.That > 2
        End Function
    '
    ' Some logic here (manipulates/gets objects)
    '
    If functionTwoEx() Then
        Return lblnExit
    End If
    '
    ' Some more logic here (manipulates objects)
    '
    If functionTwoEx() Then
        Return lblnExit
    End If
    '
    ' Performing some final actions
    '
End Function

这是否更好取决于您的实际检查有多复杂,以及您可以使
functionTwoEx
名称具有多大意义。

也许这个问题属于这里?