Это вопрос .NET для C # (или, возможно, VB.net), но я пытаюсь выяснить, в чем разница между следующими объявлениями:
string hello = "hello";
против
string hello_alias = @"hello";
Распечатка на консоли не имеет значения, свойства длины одинаковы.
@
.Ответы:
Он помечает строку как буквальный строковый литерал - все, что в строке обычно интерпретируется как escape-последовательность , игнорируется.
Так
"C:\\Users\\Rich"
же, как@"C:\Users\Rich"
Есть одно исключение: для двойной кавычки необходима escape-последовательность. Чтобы избежать двойных кавычек, нужно поместить две двойные кавычки в ряд. Например,
@""""
оценивает в"
.источник
{{
если вы хотите использовать обычную скобку вstring.Format
вызове.Это дословно строковый литерал . Это означает, что экранирование не применяется. Например:
Здесь
verbatim
иregular
содержание одинаковое.Это также позволяет многострочное содержимое - что может быть очень удобно для SQL:
Один бит экранирования, который необходим для дословных строковых литералов, состоит в получении двойной кавычки ("), которую вы делаете, удваивая ее:
источник
'@' Также имеет другое значение: размещение его перед объявлением переменной позволяет использовать зарезервированные ключевые слова в качестве имен переменных.
Например:
Я нашел только одно или два законных использования для этого. В основном в ASP.NET MVC, когда вы хотите сделать что-то вроде этого:
Который будет производить ссылку HTML, как:
В противном случае вам придется использовать «Класс», который не является зарезервированным ключевым словом, но заглавная буква «С» не соответствует стандартам HTML и выглядит неправильно.
источник
Поскольку вы также явно просили VB, позвольте мне добавить, что этот синтаксис дословной строки не существует в VB, только в C #. Скорее, все строки дословно в VB (за исключением того факта, что они не могут содержать разрывы строк, в отличие от дословных строк C #):
Последовательности перехода не существуют в VB (за исключением удвоения символа кавычки, как в дословных строках C #), что усложняет некоторые вещи. Например, чтобы написать следующий код в VB, вам нужно использовать конкатенацию (или любой другой способ построения строки)
В VB это будет написано следующим образом:
(
&
является оператором конкатенации строк VB.+
может также использоваться.)источник
"
и"
.String.Format
, что позволяет это делать. На самом деле, я бы сейчас никогда не писал"x" & Environment.NewLine
, а вместо этого всегда использовалString.Format("x{0}", Environment.Newline)
и т. Д. Тем не менее, C # здесь удобнее."x" & nl & nl
или"x" + nl + nl
или"x" . $nl . $nl
любой день закончился"x\n\n"
. Также"x" + bs + bs
окончен"x\\\\"
. И"x" + q + q
более"x\"\""
/"x"""""
. ТеперьString.Format
что касается другой проблемы, не связанной со сравнением, которое мы делаем выше.http://msdn.microsoft.com/en-us/library/aa691090.aspx
C # поддерживает две формы строковых литералов: обычные строковые литералы и дословные строковые литералы.
Обычный строковый литерал состоит из нуля или более символов, заключенных в двойные кавычки, как в «hello», и может включать как простые escape-последовательности (например, \ t для символа табуляции), так и шестнадцатеричные и escape-последовательности Unicode.
Строковый литерал состоит из символа @, за которым следует символ двойной кавычки, ноль или более символов и закрывающий символ двойной кавычки. Простой пример - @ "привет". В дословном строковом литерале символы между разделителями интерпретируются дословно, единственное исключение составляет кавычка-escape-последовательность. В частности, простые escape-последовательности и шестнадцатеричные и Unicode escape-последовательности не обрабатываются в дословных строковых литералах. Строковый литерал может содержать несколько строк.
источник
Это дословная строка, которая изменяет правила экранирования. Единственный символ, который теперь экранируется, это ", экранированный в" ". Это особенно полезно для путей к файлам и регулярных выражений:
так далее
источник
Скопировано из MSDN :
источник
Помещение
@
перед строкой позволяет использовать специальные символы, такие как обратную косую черту или двойные кавычки, без необходимости использовать специальные коды или escape-символы.Таким образом, вы можете написать:
вместо:
источник
Объяснение простое. Чтобы представить строку
"string\"
, компилятору нужен,"string\\"
потому что\
это escape-символ. Если вы используете@"string\"
вместо этого, вы можете забыть о\\
.источник