Инструменты для свопинга уравнений в коде

Я знаю, что это может быть тривиально для некоторых, но когда программирование говорит в С#, и у вас очень большая структура данных. Обычно я назначаю через уравнение для установки значения в элементе управления, а затем выполняю обратный путь.

Control1.Text = data.value1;
Control2.SelectedValue = data.value2;

Реверс:

data.value1 = Control1.Text;
data.value2 = Control2.SelectedValue;

Мне было интересно, есть ли инструмент, чтобы сделать это быстро. Предположим, что у вас очень большой набор значений.

Ответ 1

Вы можете использовать Visual Studio Find и Replace для выполнения обмена. Здесь пара регулярных выражений, которая автоматически выполнит замену:

Найти: ^{: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

... Это просто заменит назначения в текущем блоке.

Ответ 2

ReSharper 4.5 поддерживает это; выберите строки, нажмите Alt + Enter и выберите "Обратные назначения".

Ответ 3

Добрый старый excel приходит на помощь.

Вставьте оператор в ячейку A1.

Перейдите в ячейку B1 и вставьте эту формулу

=MID(A1,1,SEARCH(";",A1) - 1)

Перейдите в ячейку C1 и вставьте эту формулу -

=CONCATENATE(TRIM(MID(B1,SEARCH("=",B1)+1, 100)),
   " = ", 
   TRIM(LEFT(B1,SEARCH("=",B1)-1)), 
   ";")

Вставьте каждое из своих утверждений в отдельную ячейку.

cell A1: textBox1.Value = textBox2.Value;  
cell A2: textBox2.Value = textBox4.Value;  

Он полагается на предположение, что оператор заканчивается точкой с запятой.
По крайней мере, это дает вам то, что вам нужно.

Ответ 5

Я также видел инструмент с именем MZTools, у которого есть назначение подкачки на скриншоте. alt text
(источник: mztools.com)