Возможный дубликат:
Что такое @перед строкой для .NET?
У меня есть следующий код:
new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)
Что делает знак @
?
Возможный дубликат:
Что такое @перед строкой для .NET?
У меня есть следующий код:
new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)
Что делает знак @
?
Это не имеет никакого отношения к пути к файлу. Он изменяет поведение экранирования строк.
В строковом литерале с префиксом @
управляющие последовательности, начинающиеся с \
, отключены. Это удобно для путей к файлу, поскольку \
- разделитель путей, и вы не хотите, чтобы он запускал escape-последовательность.
В обычной строке вам придется сбегать \
в \\
, поэтому ваш пример будет выглядеть так: "pdf \\". Но поскольку он имеет префикс с @
, единственным символом, который требует экранирования, является "
(который экранируется как ""
), и может появиться \
.
Эта функция удобна для литералов строк, содержащих \
, таких как пути к файлам или регулярные выражения.
Для вашего простого примера коэффициент усиления не такой большой, но у изображения есть полный путь "C:\\ABC\\CDE\\DEF"
, тогда @"C:\ABC\CDE\DEF"
выглядит намного приятнее.
Для регулярных выражений это почти необходимо. Регулярное выражение обычно содержит несколько \
экранирующих другие символы и часто становится почти нечитаемым, если вам нужно их избежать.
Это дословный строковый литерал.
Это позволяет строке содержать обратную косую черту и даже разрывы строк без их обработки по-разному:
string multiLineString = @"First line
second line
third line";
Поскольку обратная косая черта не используется для экранирования, вставка двойной кавычки в строку требует удвоения:
string withQuote = @"before""after";
Строковые литералы Verbatim обычно используются для путей к файлам (как вы показали) и регулярных выражений, которые часто используют обратную косую черту.
Дополнительную информацию см. в статье о строках.
Это позволяет вам вводить обратную косую черту (\), не ускользая от нее:
var s1 = "C:\\Temp\\MyFileName";
var s2 = @"C:\Temp\MyFileName";
Оба результата приводят к строке с тем же содержимым (и поскольку строки интернированы во время компиляции, возможно, даже одну и ту же строковую ссылку).