Почему Visual Studio говорит мне, что у меня есть "сгенерированные компилятором ссылки", когда я пытаюсь переименовать метод?
У меня есть метод под названием FormattedJoin()
в классе утилиты ArrayUtil
. Я попробовал переименовать FormattedJoin()
просто Join()
, потому что это поведение похоже на .NET string.Join()
, поэтому я понял, что имеет смысл использовать одно и то же имя. Однако, когда я пытаюсь использовать Visual Studio для переименования метода, я получаю это предупреждение:
This member may have compiler generated references
with the same name. Refactoring the member will not
update these references, which may introduce semantic
changes and/or build errors into your code.
Я могу просто переименовать метод, и он не вызывает ошибок сборки или предупреждений компилятора. Безопасно ли это делать или я должен избегать использования метода с этим именем?
После просмотра этой ошибки я открыл Reflector, чтобы узнать, могу ли я узнать, имеет ли .NET внутренний "ArrayUtil.Join()
" или любой вариант этого, и он не похож на него. Даже если бы был метод "ArrayUtil.Join()
", не было бы другого пространства имен сделать это не проблемой?
Ответы
Ответ 1
Это связано с LINQ.
Компилятор С# будет генерировать вызовы метода с именем Join, когда вы используете ключевое слово "Join" в запросе LINQ. Обычно вызов разрешается одним из методов расширения LINQ. Однако, если вы определяете свой собственный метод с тем же сигнатурой, что и методы LINQ, ваш компилятор будет использовать ваш. Цель предупреждения - сообщить вам, что если вы сделаете дополнительный рефакторинг, что вызовы сгенерированного метода компилятора не будут изменены.
Если вы не пытаетесь написать собственный поставщик LINQ, безопасно игнорировать ошибку.