5 ответов:
дословная строка-это строка, которую не нужно экранировать, например имя файла:
string myFileName = "C:\myfolder\myfile.txt";будет
string myFileName = @"C:\myfolder\myfile.txt";символ @ означает буквально читать эту строку и не интерпретировать управляющие символы иначе.
это описано в раздел 2.4.4.5 спецификации C#:
2.4.4.5 строковые литералы
C# поддерживает два вида строковых литералов: обычные строковые литералы и дословные строковые литералы.
обычный строковый литерал состоит из нуля или более символов, заключенных в двойные кавычки, как в "hello", и может включать как простые escape-последовательности (например, \t для символа табуляции), так и шестнадцатеричный и Unicode escape последовательности.
дословный строковый литерал состоит из символа@, за которым следует символ двойной кавычки, ноль или более символов и закрывающий символ двойной кавычки. Простой пример - @ "hello". В дословном строковом литерале символы между разделителями интерпретируются дословно, единственным исключением является кавычка-escape-последовательность. В частности, простые escape-последовательности и шестнадцатеричные и Unicode escape-последовательности не обрабатываются в дословных строковых литералах. Один дословно строковый литерал может занимать несколько строк.
вы даже можете иметь литеральные новые строки в дословном строковом литерале. В обычном строковом литерале вы не можете иметь литеральные новые строки. Вместо этого вы должны использовать например
"\n".дословные строковые литералы часто полезны для встраивания имен файлов и регулярных выражений в исходный код, поскольку обратные косые черты в этих типах строк являются общими и должны быть экранированы, если используется обычный строковый литерал.
во время выполнения нет разницы между строками, созданными из обычных строковых литералов, и строками, созданными из дословных строковых литералов - они оба типа
System.String.
нет разницы во времени выполнения между строкой и дословной строкой. Они отличаются только во время компиляции. Компилятор принимает меньше escape-последовательностей в дословной строке, поэтому то, что вы видите,-это то, что вы получаете, кроме эскиза цитаты.
вы также можете использовать дословный символ@, чтобы сообщить компилятору, чтобы он обрабатывал ключевое слово как имя:
var @if = "if"; //okay, treated as a name Console.WriteLine(@if); //compiler err, if without @ is a keyword Console.WriteLine(if); var @a = "a"; //okay Console.WriteLine(@a); //also okay, @ isn't part of the name Console.WriteLine(a);
вы можете иметь многострочную строку с помощью точных строк:
Console.WriteLine(@"This is a Test for stackoverflow");без
@вы получили сообщение об ошибке.В VB14 есть новая функция под названием
Multiline Strings, это как дословные строки в C#.
Pro tip: строковые литералы VB теперь точно такие же, как строки c# verbatim.
обычные строки используют специальные escape-последовательности для перевода в специальные символы.
/* This string contains a newline and a tab and an escaped backslash\ */ Console.WriteLine("This string contains a newline\nand a tab\tand an escaped backslash\");дословные строки интерпретируются как есть, без перевода каких-либо escape-последовательностей:
/* This string displays as is. No newlines\n, tabs\t or backslash-escapes\. */ Console.WriteLine(@"This string displays as is. No newlines\n, tabs\t or backslash-escapes\.");

Comments