Строковая константа для новой строки + табуляция? - PullRequest
9 голосов
/ 15 декабря 2011

Я хочу, чтобы строковая константа C # 4 представляла новую строку и табуляцию, как показано ниже:

internal const string segment = "\r\n\t";

Я знаю, что есть Environment.Newline, который, я думаю, я мог бы использовать так:

internal const string segment = Environment.NewLine + "\t"; 

Мой вопрос: каков наиболее эффективный способ создания строковой константы с новой строкой и табуляцией?

Ответы [ 3 ]

15 голосов
/ 15 декабря 2011

При условии, что вы объявите строку как const, как указано выше, нет никакой разницы с точки зрения эффективности. Любая константа будет подставлена ​​во время компиляции и будет использовать интернированную строку.

К сожалению, второй вариант не является постоянной времени компиляции и не будет компилироваться. Чтобы использовать его, вам нужно объявить его как:

internal static readonly string segment = Environment.NewLine + "\t"; 

Лично я нахожу это очень ясным с точки зрения намерений, и это было бы моим предпочтением, даже если это не будет постоянная времени компиляции. Дополнительные издержки / потеря эффективности настолько малы, что я лично выбрал бы четкое намерение и разборчивый код вместо постоянной времени компиляции.

Обратите внимание, что использование Environment.NewLine также дает преимущество: , правильный , если вы переносите этот код в Mono, и ваша цель - использовать разделитель строк текущей платформы. Первый будет неправильным на платформах, отличных от Windows, в этом конкретном случае. Если ваша цель состоит в том, чтобы специально включить "\r\n\t" и не требовать разделителя строк для конкретной платформы, то Environment.NewLine будет неуместным выбором.

5 голосов
/ 15 декабря 2011

const не будет работать. используйте static readonly.

internal static readonly string segment = Environment.NewLine + "\t"; 
1 голос
/ 15 декабря 2011

Чистая эффективность скорости, тогда первое победит, тем более что второе не может быть сделано const, а затем не может быть скомпилировано.

Тем не менее, второе будет очень чертовски быстрымна самом деле, мне все равно.

Гораздо важнее то, что это просто не одно и то же.

Все сводится к тому, «почему вы используете \ r \ n \ t"?

Если вы используете \ r \ n \ t, потому что вы в Windows, а в Windows символы новой строки обычно \ r \ n, то вам определенно следует использовать:

internal static readonly string segment = Environment.NewLine + "\t";

Использование другого будет неправильным и может привести к ошибкам, которые вы не увидите в течение многих лет.

Если вы используете \ r \ n, потому что работаете со спецификацией, которая говорит "отдельные сегменты"с CRLF, за которым следует вкладка ", тогда вам непременно следует использовать:

internal const string segment = "\r\n\t";

Использование другого было бы неправильным.

Это то, что действительно кусает людей по-настоящему.Пользователи Windows пишут HTTP-код, который просто использует новую строку Windows между заголовками два между заголовками и телом.Затем он переносится куда-то, где символ новой строки равен \ n, и прерывается, потому что HTTP передает мандат \ r \ n независимо от того, какую систему использует.То же самое применяется и наоборот.

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

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