2009-06-05 10 views
11

Ho un metodo chiamato FormattedJoin() in una classe di utilità denominata ArrayUtil. Ho provato a rinominare FormattedJoin() a solo Join() perché il suo comportamento è simile a .NET string.Join(), quindi ho pensato che avesse senso usare lo stesso nome. Tuttavia, quando si tenta di utilizzare Visual Studio per rinominare il metodo, ottengo questo avvertimento:Perché Visual Studio mi dice che ho "riferimenti generati dal compilatore" quando provo a rinominare un metodo?

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.

posso rinominare il metodo proprio bene e non provoca errori di generazione o avvisi del compilatore. È sicuro farlo o dovrei evitare di avere un metodo con questo nome?

Dopo aver visto questo errore, ho aperto Reflector per vedere se ho potuto scoprire se .NET aveva un interno "ArrayUtil.Join()" o una qualsiasi variazione di quello e non sembra. Anche se esistesse un metodo "ArrayUtil.Join()", non avendo uno spazio dei nomi diverso questo renderebbe un non-problema?

risposta

15

Questo ha a che fare con LINQ.

Il compilatore C# genera chiamate a un metodo denominato Join quando si utilizza la parola chiave "Join" in una query LINQ. Solitamente la chiamata viene risolta in uno dei metodi di estensione LINQ. Se si definisce il proprio metodo con la stessa firma dei metodi LINQ, tuttavia, il compilatore utilizzerà il proprio. Lo scopo dell'avvertenza è di farti sapere che se esegui ulteriori refactoring che le chiamate al metodo generato dal compilatore non saranno modificate.

A meno che non si stia tentando di scrivere un provider LINQ personalizzato, è possibile ignorare l'errore.

+3

Wow, questo errore non lo rende affatto chiaro! Grazie per avermi fatto sapere cosa stava succedendo. Pensavo di fare qualcosa di veramente brutto ... –

Problemi correlati