Знак штруделя C # - PullRequest
       41

Знак штруделя C #

10 голосов
/ 26 сентября 2010

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

bool b = false;
if (@b)
{

}

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

Интересно: что означает приведенный выше код?

Ответы [ 2 ]

18 голосов
/ 26 сентября 2010

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

int @class = 10;

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

11 голосов
/ 26 сентября 2010

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

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

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

+ 1 также для штруделя:)

...