Подтвердить что ты не робот

Объявление одиночной строки looooong в С#

Есть ли достойный способ объявить длинную одиночную строку на С#, чтобы не было объявлено и/или просмотреть строку в редакторе?

Параметры, о которых я знаю, следующие:

1: пусть он запустится. Это плохо, потому что потому, что ваша строка перемещается вправо от экрана, чтобы разработчик, читающий сообщение, должен был раздражать прокрутку и читать.

string s = "this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  ";

2: @+ новые строки. Это выглядит красиво в коде, но вводит новые строки в строку. Кроме того, если вы хотите, чтобы он выглядел красиво в коде, вы не только получаете новые строки, но также получаете неудобные пробелы в начале каждой строки строки.

string s = @"this is my really long string.  this is my long string.
             this line will be indented way too much in the UI. 
This line looks silly in code.  All of them suffer from newlines in the UI.";

3: "" + ... Это работает отлично, но это супер разочаровывает тип. Если мне нужно добавить текст с половиной строки, я должен обновить все типы + и переместить текст по всему.

string s = "this is my really long string.  this is my long string. " + 
           "this will actually show up properly in the UI and looks " +
           "pretty good in the editor, but is just a pain to type out " +
           "and maintain";

4: string.format or string.concat. В основном то же, что и выше, но без плюсовых знаков. Имеет те же преимущества и недостатки.

Нет ли способа сделать это хорошо?

4b9b3361

Ответ 1

Это зависит от того, как строка будет использоваться. Все ответы здесь действительны, но контекст важен. Если длинная строка "s" будет записана в журнал, она должна быть окружена тестом на проверку журналов, например, этот пример Log4net:

if (log.IsDebug) {
    string s = "blah blah blah" + 
    // whatever concatenation you think looks the best can be used here,
    // since it guarded...
}

Если длинная строка s будет отображаться для пользователя, тогда ответ разработчика - лучший выбор... они должны быть в файле ресурсов.

Для других целей (генерации строк SQL-запросов, записи в файлы [но снова рассмотрите ресурсы для них] и т.д.), где вы объединяете больше, чем просто литералы, рассмотрите StringBuilder, как предлагает Wael Dalloul, особенно если ваша строка возможно, завершатся функцией, которая в какой-то дате в далеком будущем может быть вызвана много раз в критическом по времени приложении (все эти призывы складываются). Я делаю это, например, при создании SQL-запроса, где у меня есть параметры, которые являются переменными.

Кроме того, нет, я ничего не знаю, что оба выглядят красиво и легко набирать (хотя предложение об отложении слов - хорошая идея, оно может плохо переводить на инструменты diff, распечатывать код или инструменты для проверки кода). Это перерывы. (Я лично использую подход "плюс-знак", чтобы сделать линейные обходы аккуратными для наших распечаток и обзоров кода).

Ответ 2

Есть способ. Поместите свою очень длинную строку в ресурсы. Вы можете даже положить туда длинные фрагменты текста, потому что там, где должны быть тексты. Наличие их непосредственно в коде - настоящая плохая практика.

Ответ 3

При использовании Visual Studio

Tools > Options > Text Editor > All Languages > Word Wrap

Я уверен, что любой другой текстовый редактор (включая блокнот) сможет это сделать!

Ответ 4

Нужно ли его определять в исходном файле? В противном случае определите его в ресурсе или файле конфигурации.

Ответ 5

вы можете использовать StringBuilder следующим образом:

StringBuilder str = new StringBuilder();
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
string s = str.ToString();

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

Ответ 6

Если вам действительно нужна эта длинная строка в коде, и вы действительно не хотите вводить цитату конца-цитаты плюс-начать, вы можете попробовать что-то вроде этого.

string longString = @"Some long string, 
    with multiple whitespace characters 
    (including newlines and carriage returns)
    converted to a single space
    by a regular expression replace.";

longString = Regex.Replace(longString, @"\s+", " ");

Ответ 7

Лично я бы прочитал строку, большую из файла, возможно, XML-документа.

Ответ 8

Для действительно длинных строк я бы сохранил его в XML (или ресурсе). Для случаев, когда имеет смысл иметь его в коде, я использую многострочную конкатенацию строк с оператором +. Единственное место, где я могу думать о том, где я это делаю, - это мои модульные тесты для кода, который читает и анализирует XML, где я фактически пытаюсь избежать использования XML файла для тестирования. Поскольку это unit test, я почти всегда хочу иметь строку, чтобы там ссылаться. В этих случаях я могу выделить их все в директиве #region, чтобы я мог показать/скрыть ее по мере необходимости.

Ответ 9

Я либо просто запускаю его, либо использую string.format и пишу строку в одной строке (пусть она запускает метод), но помещает каждый из аргументов в новую строку, что делает ее более легкой для чтения или, по крайней мере, дать читателю некоторое представление о том, что он может ожидать в длинной строке, не читая ее подробно.

Ответ 10

если вам действительно нужно сохранить его в коде, а затем о @+ символах новой строки, а затем простую функцию для выделения строк новой строки.

Ответ 11

Вы можете использовать StringBuilder