Почему Visual Studio говорит мне, что у меня есть "сгенерированные компилятором ссылки", когда я пытаюсь переименовать метод? - PullRequest
11 голосов
/ 05 июня 2009

У меня есть метод с именем FormattedJoin() в служебном классе с именем ArrayUtil. Я попытался переименовать FormattedJoin() в Join(), потому что его поведение аналогично .NET string.Join(), поэтому я решил, что имеет смысл использовать то же имя. Однако, когда я пытаюсь использовать Visual Studio для переименования метода, я получаю это предупреждение:

This member may have compiler generated references<br> with the same name. Refactoring the member will not<br> update these references, which may introduce semantic<br> changes and/or build errors into your code.

Я могу переименовать метод просто отлично, и он не вызывает ошибок сборки или предупреждений компилятора. Безопасно ли это делать или мне следует избегать использования метода с таким именем?

Увидев эту ошибку, я открыл Reflector , чтобы посмотреть, смогу ли я узнать, есть ли в .NET внутренний "ArrayUtil.Join()" или какой-либо другой вариант, и он не похож на него. Даже если бы существовал метод "ArrayUtil.Join()", разве другое пространство имен не сделало бы это проблемой?

1 Ответ

16 голосов
/ 06 июня 2009

Это связано с LINQ.

Компилятор C # будет генерировать вызовы метода с именем Join, когда вы используете ключевое слово "Join" в запросе LINQ. Обычно вызов разрешается к одному из методов расширения LINQ. Однако если вы определяете свой собственный метод с той же сигнатурой, что и методы LINQ, компилятор будет использовать ваш. Цель предупреждения - сообщить вам, что если вы сделаете дополнительный рефакторинг, то вызовы методов, сгенерированные компилятором, не будут изменены.

Если вы не пытаетесь написать собственного поставщика LINQ, можно игнорировать ошибку.

...