С# @модификатор для параметров методов
Я использовал плагин ReSharper на VS2010, и я создавал метод интерфейса.
ReSharper помещает @в имя параметра. Что используется для?
int Count(Func<ContratoList, bool> @where);
Какая разница для
int Count(Func<ContratoList, bool> where);
Спасибо!
Ответы
Ответ 1
Символ @
позволяет использовать зарезервированные слова в имени переменной.
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
Как правильно указал Марк в своем комментарии и его ответе, ReSharper на самом деле не так, потому что where
является контекстным ключевым словом и на самом деле не является зарезервированным слово, поэтому ваш метод будет компилироваться без @
.
Ответ 2
Во многих случаях resharper ошибочно делает это. where
- это контекстуальное ключевое слово, означающее: оно действует только как ключевое слово в некоторых очень специфических сценариях (например, LINQ). В указанной позиции это фактически ничего не делает. Это не смутилось бы как ключевое слово, поскольку, когда разработчики языка С# добавляют ключевые слова к С#, им необходимо убедиться, что ранее существовавший код продолжает компилироваться (насколько это возможно), и это было бы законным в более раннем С#.
Использование @
также смущает/усложняет некоторые инструменты (например, бритва, поскольку бритва уже использует @
для обозначения начала кода - это означает, что для переменной с использованием @
(т.е. @string
)) иногда вам нужно @
, а иногда вам нужно @@
- и я знаю хотя бы одно ложноположительное предупреждение IDE, которое это может вызвать).
Однако! Если параметр был if
или class
и т.д., То @if
/@class
позволяет использовать это как имя переменной, а не путаться как ключевое слово С#. Это также не отличная идея, заметьте. Но тем не менее, мы бы не стали делать это со всем нашим кодом (string @name = ...
и т.д.) - так зачем это делать? Он не нужен, и , как показал этот вопрос, он добавил путаницу.
Лично, однако, я бы нашел имя параметра, которое не является ключевым словом или контекстуальным ключевым словом.
Ответ 3
Он позволяет использовать зарезервированные ключевые слова в качестве имен переменных.
Ответ 4
Он остановит этот параметр, действуя как ключевое слово (поскольку where
является ключевым словом в linq среди других вещей).
Ответ 5
Это делается потому, что 'where' является защищенным ключевым словом в С# (LINQ)
Ответ 6
он позволяет использовать зарезервированные слова в качестве параметров.