Инструменты для свопинга уравнений в коде
Я знаю, что это может быть тривиально для некоторых, но когда программирование говорит в С#, и у вас очень большая структура данных. Обычно я назначаю через уравнение для установки значения в элементе управления, а затем выполняю обратный путь.
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;
Он полагается на предположение, что оператор заканчивается точкой с запятой.
По крайней мере, это дает вам то, что вам нужно.
Ответ 4
Нашел это тоже: еще один пример и объяснение того, как его установить:
http://www.switchonthecode.com/tutorials/how-to-configure-and-use-visual-studio-macros
Ответ 5
Я также видел инструмент с именем MZTools, у которого есть назначение подкачки на скриншоте.
![alt text]()
(источник: mztools.com)