Авто рефакторинг в строку. Формат - PullRequest
4 голосов
/ 07 апреля 2011

У меня есть проект на c # в VS2008, в котором много строк кода, которые выглядят так:

string s = "bla blab" + x + "bla bla bla" + y + .... ;

и я хотел бы преобразовать эти строки в одну строку, используя string.Format (...).

В настоящее время я использую Resharper 5.0 и могу одним щелчком мыши выполнить рефакторинг одной строки кода. Проблема в том, что у меня больше 1000 строк, и я не хочу вручную проходить каждую строку.

Есть ли способ сделать это автоматически?

Edit: Как Марк исправил меня, мне не нужно это делать, но у меня есть другая очень похожая проблема: Я получил этот код

 string s = "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa";

(строка - это какой-то SQL-запрос)

и я хотел бы изменить его на одну константную строку:

string s = "aaaaaaaaaaaaaaaaaa....aaaaa";

(на этот раз это более эффективно, верно?)

resharper может сделать это автоматически для каждой строки, но я бы хотел сделать это много раз.

было бы здорово сохранить отступ строк:

string s = @"aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa";

но только одна длинная строка тоже подойдет.

спасибо, Лев.

Ответы [ 2 ]

5 голосов
/ 07 апреля 2011

Из комментариев:

это гораздо более эффективная память

Нет, это не так. Это примерно то же самое, с string.Format незначительно меньше эффективно, так как данные передаются в массиве (обычно GEN0) и необходимо проанализировать строку формата (что на самом деле очень быстро, если честно).

Это определено в спецификации , что составная строка + последовательность, то есть

string s = "abc" + x + "def" + y;

Компилируется как:

string s = string.Concat("abc", x, "def", y);

Внутренне это очень эффективно и не решает классическую проблему "телескопических струн". Кроме того, существуют перегрузки string.Format, принимающие различное количество операндов, чтобы избежать даже издержек массива params. И дополнительные перегрузки, когда все операнды являются строками (что может быть даже проще).

Короче, это вам ничего не стоит. Если вы не делаете это, чтобы предоставить внешние форматы (что довольно часто встречается в сценарии i18n), я бы оставил это в покое. Все, что вы делаете, это рискуете ошибками; Вы не делаете это более эффективным.

0 голосов
/ 07 апреля 2011

Вы пробовали запустить очистку кода в Resharper?Вы можете создать отдельный профиль, который вносит только те изменения, которые вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...