Почему 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, безопасно игнорировать ошибку.