2009-06-05 11 views
11

Mam metodę o nazwie FormattedJoin() w klasie narzędzie o nazwie ArrayUtil. Próbowałem zmienić nazwę na FormattedJoin() tylko na Join(), ponieważ jest to zachowanie podobne do .NET-a string.Join(), więc uznałem, że ma sens używanie tej samej nazwy. Jednak, gdy próbuję użyć programu Visual Studio, aby zmienić nazwę metody, mam to ostrzeżenie:Dlaczego program Visual Studio mówi mi, że mam "wygenerowane przez kompilator odniesienia", gdy próbuję zmienić nazwę metody?

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.

mogę zmienić nazwę metody dobrze i nie powoduje żadnych błędów zbudować lub ostrzeżenia kompilatora. Czy jest to bezpieczne, czy też powinienem unikać stosowania metody o tej nazwie?

Po obejrzeniu tego błędu otworzyłem Reflector, aby sprawdzić, czy mogę się dowiedzieć, czy .NET ma wewnętrzny "ArrayUtil.Join()" lub jakąkolwiek odmianę tego i nie wygląda na to. Nawet gdyby istniała metoda "ArrayUtil.Join()", czy nie miałaby ona innej przestrzeni nazw, czyniąc to niezwiązaną?

Odpowiedz

15

Ma to związek z LINQ.

Kompilator C# wygeneruje wywołania metody o nazwie Dołącz, gdy użyjesz słowa kluczowego "Dołącz" w zapytaniu LINQ. Zwykle wywołanie zostaje rozstrzygnięte na jedną z metod rozszerzenia LINQ. Jeśli zdefiniujesz własną metodę z tym samym znakiem, co metody LINQ, kompilator użyje twojego. Celem ostrzeżenia jest poinformowanie użytkownika, że ​​w przypadku dodatkowego refaktoryzacji wywołane przez kompilator wywołania metod nie zostaną zmodyfikowane.

Jeśli nie próbujesz napisać niestandardowego dostawcy LINQ, możesz zignorować błąd.

+3

Wow, ten błąd wcale tego nie wyjaśnia! Dzięki, że dałeś mi znać, co się dzieje. Myślałem, że robię coś naprawdę złego ... –

Powiązane problemy