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

@(at) вход в файл путь/строку

Возможный дубликат:
Что такое @перед строкой для .NET?

У меня есть следующий код:

new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)

Что делает знак @?

4b9b3361

Ответ 1

Это не имеет никакого отношения к пути к файлу. Он изменяет поведение экранирования строк.

В строковом литерале с префиксом @ управляющие последовательности, начинающиеся с \, отключены. Это удобно для путей к файлу, поскольку \ - разделитель путей, и вы не хотите, чтобы он запускал escape-последовательность.

В обычной строке вам придется сбегать \ в \\, поэтому ваш пример будет выглядеть так: "pdf \\". Но поскольку он имеет префикс с @, единственным символом, который требует экранирования, является " (который экранируется как ""), и может появиться \.

Эта функция удобна для литералов строк, содержащих \, таких как пути к файлам или регулярные выражения.

Для вашего простого примера коэффициент усиления не такой большой, но у изображения есть полный путь "C:\\ABC\\CDE\\DEF", тогда @"C:\ABC\CDE\DEF" выглядит намного приятнее.

Для регулярных выражений это почти необходимо. Регулярное выражение обычно содержит несколько \ экранирующих другие символы и часто становится почти нечитаемым, если вам нужно их избежать.

Ответ 2

Это дословный строковый литерал.

Это позволяет строке содержать обратную косую черту и даже разрывы строк без их обработки по-разному:

string multiLineString = @"First line
second line
third line";

Поскольку обратная косая черта не используется для экранирования, вставка двойной кавычки в строку требует удвоения:

string withQuote = @"before""after";

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

Дополнительную информацию см. в статье о строках.

Ответ 3

Это позволяет вам вводить обратную косую черту (\), не ускользая от нее:

 var s1 = "C:\\Temp\\MyFileName";
 var s2 = @"C:\Temp\MyFileName";

Оба результата приводят к строке с тем же содержимым (и поскольку строки интернированы во время компиляции, возможно, даже одну и ту же строковую ссылку).