Я использовал плагин ReSharper на VS2010 и создавал метод интерфейса. ReSharper поместил @ в имя параметра. Для чего это используется?
int Count(Func<ContratoList, bool> @where);
В чем разница для
int Count(Func<ContratoList, bool> where);
Спасибо!
where
- это контекстное ключевое слово , что означает: оно действует как ключевое слово только в некоторых очень специфических сценариях (например, LINQ). В указанной позиции это на самом деле ничего не делает. Это не будет путать как ключевое слово, так как когда разработчики языка C # добавляют ключевые слова в C #, они должны гарантировать, что существующий код продолжает компилироваться (насколько это возможно), и это было бы допустимо в более ранних версиях C #.
Использование @
также сбивает с толку / усложняет некоторые инструменты (в частности, бритву, поскольку бритва уже использует @
для указания начала кода - это означает, что для переменной, использующей @
(то есть @string
) иногда вам нужно @
, а иногда вам нужно @@
- и я знаю, по крайней мере, одно предупреждение о ложноположительном IDE, которое это может вызвать).
Однако! Если параметр был if
или class
и т. Д., То @if
/ @class
позволяет использовать его в качестве имени переменной, а не путать как ключевое слово C #. Это также не очень хорошая идея, заметьте. Но точно так же мы не стали бы делать это для всего нашего кода (string @name = ...
и т. Д.) - так зачем это здесь? Это не нужно, и , как показывает этот вопрос , это добавило путаницы.
Лично я нашел бы имя параметра, которое не является ключевым словом или контекстным ключевым словом.
Этот параметр не будет действовать как ключевое слово (среди прочего, where
является ключевым словом в linq).
позволяет использовать зарезервированные слова в качестве параметров.