Дословные строковые литералы и управляющие последовательности

Есть ли разница в том, как компилятор C# или среда выполнения .NET обрабатывают дословные строковые литералы по сравнению с использованием управляющих последовательностей (т. е. в производительности), или это просто вопрос стиля времени разработки? НАПРИМЕР.:

var pathA = "c:\\somewhere";
var pathB = @"c:\somewhere";

Я бы предположил, что они скомпилированы одинаково, и это не имеет значения, но было просто любопытно.


person Tom Hundley    schedule 29.01.2013    source источник
comment
Я думаю, что они скомпилированы в одном и том же. Логически говоря, почему он должен генерировать разные IL?   -  person Freeman    schedule 29.01.2013


Ответы (3)


Любая разница здесь строго ограничивается компилятором; IL и среда выполнения не имеют понятия о дословном и экранированном — они просто имеют строку.

Что касается выбора: как удобнее ;p Я почти всегда использую дословные строковые литералы, если есть необычные символы, так как это позволяет очень легко и визуально создавать многострочные строки.

Как интересный случай:

bool areSame = ReferenceEquals("c:\\somewhere", @"c:\somewhere"); // true

что говорит о том, что они точно являются одним и тем же экземпляром строки (благодаря "интернированию"). Они не просто эквивалентны; они являются одним и тем же строковым экземпляром для среды выполнения. Поэтому невозможно, чтобы они (для среды выполнения) каким-либо образом отличались друг от друга.

person Marc Gravell    schedule 29.01.2013

Они точно такие же. Попробуйте декомпилировать обе версии декомпилятором.

Это всего лишь вопрос удобства для разработчиков при написании кода.

person Cédric Bignon    schedule 29.01.2013

Знак @ перед строкой указывает компилятору игнорировать любые встроенные управляющие последовательности.

строка "\"" даст одну двойную кавычку. строка "\" даст одну обратную косую черту строка @"\" даст две обратные косые черты

person One Man Crew    schedule 29.01.2013