Что делает размещение @перед именем переменной С#?

Я работал с некоторым кодом кода С#, и я видел много символов @перед именами переменных. Что это означает или делает?

В настоящее время я вижу это много перед переменными с общими именами, которые не зарезервированы. Например:.

MyProcedure(@step.LoadInstanceId, @step.ResultCode, @step.StatusCode);

Учитывая, что этот шаг не является зарезервированным словом, есть ли причина, по которой они должны быть экранированы?

4b9b3361

Это просто способ разрешить объявление зарезервированных ключевых слов как vars.

void Foo(int @string)
152
ответ дан 31 окт. '08 в 22:34
источник

Он позволяет использовать зарезервированное слово, например, "public", как имя переменной.

string @public = "foo";

Я бы не рекомендовал это, так как это может привести к ненужной путанице.

33
ответ дан 31 окт. '08 в 22:38
источник

Помещение @перед строкой говорит компилятору не обрабатывать escape-последовательности, найденные внутри строки.

Из документация:

Преимущество @-quoting заключается в том, что escape-последовательности не обрабатываются, что упрощает запись, например, полного имени файла:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

Чтобы включить двойную кавычку в строку с @-котированием, дважды:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

Другим использованием символа @является использование ссылочных (/reference) идентификаторов, которые являются ключевыми словами С#. Для получения дополнительной информации см. 2.4.2 Идентификаторы.

15
ответ дан 31 окт. '08 в 22:39
источник

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

4
ответ дан 20 дек. '11 в 16:04
источник

Знак @используется с идентификаторами, которые совпадают с языковыми ключевыми словами. Для этого используются два основных  - взаимодействие с кодом, отличным от С#. В таких языках, как VB или IronPython, ключевые слова не такие же, как в С#, и они могут объявлять классы и свойства с именами, которые соответствуют ключевым словам С#. Если этой функции нет, этот код не будет доступен на С#.  - машинный код. Если генератор кода генерирует код на основе некоторого внешнего источника (например, WSDL), генератор может просто префикс всех идентификаторов с помощью @и не проверять и преобразовывать идентификаторы, соответствующие ключевым словам С#.

Вы уверены, что ваш случай не второй?

3
ответ дан 20 дек. '11 в 16:10
источник