Возможный дубликат:
Что такое @перед строкой для .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";
Оба результата приводят к строке с тем же содержимым (и поскольку строки интернированы во время компиляции, возможно, даже одну и ту же строковую ссылку).