С# указатель штруделя

При кодировании на С# я по ошибке добавлял знак strudel перед переменной в выражении if (вместо восклицательного знака).

bool b = false;
if (@b)
{

}

Я удивлен, что он скомпилирован успешно без ошибок.

Интересно: В чем смысл приведенного выше кода?

Ответ 1

@ может использоваться для "escape" идентификаторов, если вы хотите использовать ключевые слова. Например:

int @class = 10;

Конечно, как правило, плохая идея использовать ключевые слова как идентификаторы, но если вы используете библиотеку классов, которая их использует, ее может быть трудно избежать. Иногда также полезно использовать "@this" для ситуаций, когда вы хотите эффективно иметь ссылку this, но по какой-то причине вы не можете ее использовать. (Это довольно мало и далеко друг от друга, но я видел это пару раз, и об этом стоит хотя бы знать.)

Ответ 2

Джон ответ подводит итоги. Примером того, когда вы должны использовать эту технику экранирования, является указание атрибутов HTML в анонимных типах на вспомогательные методы в ASP.NET MVC.

Html.ActionLink("text", "action", "controller",
    new { @class = "some-css-class" }, null);

Я также ударил это при составлении анонимных типов для публикации через HTTP с использованием кодировки JSON, где вы не можете изменить удаленный API.

+1 для 'strudel' тоже:)