Модификатор C # @ для параметров методов

Я использовал плагин ReSharper на VS2010 и создавал метод интерфейса. ReSharper поместил @ в имя параметра. Для чего это используется?

int Count(Func<ContratoList, bool> @where);

В чем разница для

int Count(Func<ContratoList, bool> where);

Спасибо!

23
задан Jon Egerton 8 November 2011 в 14:00
поделиться

3 ответа

1115] Во многих отношениях резарпер не прав, когда делает это. where - это контекстное ключевое слово , что означает: оно действует как ключевое слово только в некоторых очень специфических сценариях (например, LINQ). В указанной позиции это на самом деле ничего не делает. Это не будет путать как ключевое слово, так как когда разработчики языка C # добавляют ключевые слова в C #, они должны гарантировать, что существующий код продолжает компилироваться (насколько это возможно), и это было бы допустимо в более ранних версиях C #.

Использование @ также сбивает с толку / усложняет некоторые инструменты (в частности, бритву, поскольку бритва уже использует @ для указания начала кода - это означает, что для переменной, использующей @ (то есть @string) иногда вам нужно @, а иногда вам нужно @@ - и я знаю, по крайней мере, одно предупреждение о ложноположительном IDE, которое это может вызвать).

Однако! Если параметр был if или class и т. Д., То @if / @class позволяет использовать его в качестве имени переменной, а не путать как ключевое слово C #. Это также не очень хорошая идея, заметьте. Но точно так же мы не стали бы делать это для всего нашего кода (string @name = ... и т. Д.) - так зачем это здесь? Это не нужно, и , как показывает этот вопрос , это добавило путаницы.

Лично я нашел бы имя параметра, которое не является ключевым словом или контекстным ключевым словом.

26
ответ дан 29 November 2019 в 00:47
поделиться

Этот параметр не будет действовать как ключевое слово (среди прочего, where является ключевым словом в linq).

4
ответ дан 29 November 2019 в 00:47
поделиться

позволяет использовать зарезервированные слова в качестве параметров.

1
ответ дан 29 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: