合并冗余条件

Consolidate Redundant Condition

在我维护的一个项目中,Visual Studio 标记了一些代码的高度复杂性。该代码正在为打印预览创建原始 RTF,并且有许多行具有相同的条件 If bolprint Then ...。有些条件是一行,有些是多行。并非本节中的所有代码都使用该条件。

我想清楚地合并这些条件,但我不确定如何在不一次一行的情况下这样做。我有 ReSharper,但我不知道如何为此编写 SSR。

编辑:

该代码包括单行条件语句和条件块。更复杂的是,还有一些行不是有条件的,所以我不能只是包装整个块并执行正则表达式 find/replace。一些示例行:

If bolPrint Then
    If Me.cbxDeltaBC.Checked AndAlso Me.cbxEqualBC.Checked Then Writer.WriteLine("\pard\b0                    Printed by: \b " & strUserLoggedIn _
       & "                 EQUAL and DELTA             Sort by: \b " & cbbSortBC.Text & "\par")
    If Me.cbxDeltaBC.Checked AndAlso Not Me.cbxEqualBC.Checked Then Writer.WriteLine("\pard\b0                    Printed by: \b " & strUserLoggedIn _
       & "                      DELTA                  Sort by: \b " & cbbSortBC.Text & "\par")
    If Not Me.cbxDeltaBC.Checked AndAlso Me.cbxEqualBC.Checked Then Writer.WriteLine("\pard\b0                    Printed by: \b " & strUserLoggedIn _
       & "                      EQUAL                  Sort by: \b " & cbbSortBC.Text & "\par")
End If

If bolPrint Then Writer.Write("\par\ulnone\fs16 ")
If bolPrint Then Writer.Write("(A)               ")
If bolPrint Then Writer.Write("(A)     ")
If bolPrint Then Writer.Write("(A)   ")
If bolPrint Then Writer.Write("    (A)  ")
If bolPrint Then Writer.Write(" (A&B)             ")
If bolPrint Then Writer.Write("(A&B)   ")

不幸的是,我认为 Resharper 无法帮助您解决这个问题。您可能必须手动清理它。在一个条件下对语句进行分组应该不会花太长时间。如果有单元测试,那么它可能会让您更有信心重构这段美妙的代码。一次只做一点点,比如 'boy scout rule' - 让这个地方比你发现它时的状态更好。