在代码中交换方程的工具

Nap*_*Nap 10 c#

我知道这对某些人来说可能是微不足道的,但是当编程在c#中说并且你有一个非常大的数据结构时.我通常通过公式进行分配,以便在控制中设置值,然后以相反的方式进行.

Control1.Text = data.value1;
Control2.SelectedValue = data.value2;
Run Code Online (Sandbox Code Playgroud)

相反:

data.value1 = Control1.Text;
data.value2 = Control2.SelectedValue;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一个工具可以快速完成.这是假设您有一组非常大的值.

Rob*_*les 16

您可以使用Visual Studio查找和替换来执行交换.这是一个正则表达式对,它将自动执行替换:

查找:^{:b*}{([^=]+)} += +{([^=]+)};
替换:\1\3 = \2;

记得打开正则表达式.这将完全符合您的要求.这也可以封装到宏中.这是我放在一起的示例宏:

Sub SwapAssignments()
    DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
    DTE.Find.FindWhat = "^{:b*}{([^=]+)} += +{([^=]+)};"
    DTE.Find.ReplaceWith = "\1\3 = \2;"
    DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocumentFunction
    DTE.Find.MatchCase = False
    DTE.Find.MatchWholeWord = False
    DTE.Find.MatchInHiddenText = True
    DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
    DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
    If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
        Throw New System.Exception("vsFindResultNotFound")
    End If
    DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()
End Sub
Run Code Online (Sandbox Code Playgroud)

...这将简单地交换当前块中的分配.


Tru*_*ill 8

ReSharper 4.5支持这一点; 选择行,按Alt + Enter,然后选择反向分配.