Что означает символ @ перед строкой в C#?
Что такое @ перед строкой в C#?
Символ @ перед строкой создает буквальную строку (verbatim string literal). Это специальный синтаксис, который меняет правила обработки строки компилятором. Давайте разберем на примерах.
Основное назначение: отмена экранирования
В обычных строках обратная косая черта \ используется для escape-последовательностей:
string normal = "C:\\Users\\Admin"; // Двойной слеш для одного
string withTab = "Hello\tWorld"; // \t - символ табуляции
С @ все обратные слеши считаются обычными символами:
string verbatim = @"C:\Users\Admin"; // Один слеш, всё работает
string verbatim2 = @"Hello\tWorld"; // Выведет буквально "Hello\tWorld"
Многострочные строки
Буквальные строки сохраняют переносы строк прямо в коде:
string multiline = @"Первая строка
Вторая строка
Третья строка";
Обычная строка так не работает — перенос нужно делать через \n или конкатенацию.
Как экранировать кавычки в буквальных строках?
Единственный символ, который нужно экранировать — это двойная кавычка. Для этого используется удвоение:
string quote = @"Он сказал: ""Привет"""; // Результат: Он сказал: "Привет"
Когда использовать @?
- Пути к файлам — избавляет от дубляжа слешей:
@"C:\Folder\File.txt" - Регулярные выражения — в них много обратных слешей:
@"\d+\.\d+" - SQL-запросы — многострочные запросы становятся читаемыми
- JSON или XML — когда нужно вставить большой блок текста
Важное отличие: @ для идентификаторов
Вы упомянули @class. Это другая возможность — использование зарезервированных слов как имен переменных:
string @class = "C#"; // class - ключевое слово, но с @ можно
int @int = 5; // Так тоже можно, но лучше избегать
Это не связано с буквальными строками — просто синтаксический сахар для обратной совместимости.
Производительность
Буквальные строки не создают накладных расходов во время выполнения — компилятор обрабатывает их на этапе компиляции. Единственное отличие: в IL-коде escape-последовательности разворачиваются в фактические символы.
Итог
@перед строкой = "воспринимай всё буквально"- Обратные слеши не экранируются
- Переносы строк сохраняются
- Кавычки экранируются удвоением (
"") - Не путать с @ перед идентификаторами
Используйте буквальные строки везде, где много обратных слешей или нужны многострочные тексты — это делает код чище и понятнее.
<<Альтернативный взгляд: когда @ не нужен
Несмотря на удобство, буквальные строки имеют ограничения. В современных версиях C# (начиная с 11) появились сырые строковые литералы (raw string literals) — три двойные кавычки """:
string raw = """"
C:\Users\Admin
Многострочный текст
с "кавычками" внутри
"""";
Они еще удобнее для сложных многострочных блоков — не нужно удваивать кавычки. Но для простых путей и регулярных выражений классический @ остается лучшим выбором.
Совет для новичков
Если вы часто работаете с путями в Windows, привыкайте использовать @ — это спасет от глупых ошибок. Для кроссплатформенного кода лучше использовать Path.Combine() или / (слеш работает и в Windows):
string path = Path.Combine("C:", "Users", "Admin");
string path2 = "C:/Users/Admin"; // Тоже работает в .NET
Но если вам нужно именно сохранить обратные слеши — @ незаменим.