2009-06-05 3 views
11

ArrayUtil이라는 유틸리티 클래스에 FormattedJoin()이라는 메서드가 있습니다. 나는 Join()으로 FormattedJoin()으로 이름을 바꾸려고했는데, 그 이유는 동작이 .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.

내가 잘하는 방법을 바꿀 수 있습니다 그것은 어떤 빌드 오류 또는 컴파일러 경고가 발생하지 않습니다 : 나는 방법의 이름을 변경하려면 Visual Studio를 사용하려고하면 그러나, 나는이 경고를 얻을. 이 작업을 수행하는 것이 안전할까요? 아니면이 이름의 메소드를 사용하지 않아야합니까?

이 오류를보고 난 후에 Reflector을 열어 .NET에 내부적으로 "ArrayUtil.Join()"또는 그 변형이 있었는지 알아낼 수 있는지 그리고 그 모양이 보이지 않는지 확인할 수있었습니다. 그래도 "ArrayUtil.Join()"메서드가 있더라도 다른 네임 스페이스가 없어도 문제가되지 않습니까?

답변

15

이것은 LINQ와 관련이 있습니다.

LINQ 쿼리에서 "Join"키워드를 사용할 때 C# 컴파일러는 Join이라는 메서드에 대한 호출을 생성합니다. 일반적으로 호출은 LINQ 확장 메서드 중 하나로 해결됩니다. 그러나 LINQ 메서드와 동일한 서명으로 자신의 메서드를 정의하면 컴파일러에서이 메서드를 사용합니다. 경고의 목적은 추가 리팩토링을하면 컴파일러에서 생성 된 메서드 호출이 수정되지 않는다는 것을 알려주는 것입니다.

사용자 지정 LINQ 공급자를 작성하려고하지 않는 한 오류를 무시해도 안전합니다.

+3

와우, 그 오류가 전혀 명확하지 않습니다! 무슨 일인지 알려 줘서 고마워. 나는 정말로 나쁜 것을하고 있다고 생각했다. –

관련 문제