Подтвердить что ты не робот

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

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

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

Какая разница для

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

Спасибо!

4b9b3361

Ответ 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

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