2009-06-05 38 views
11

我在名爲ArrayUtil的工具類中有一個名爲FormattedJoin()的方法。我嘗試將FormattedJoin()重命名爲Join(),因爲它的行爲與.NET的string.Join()類似,所以我認爲使用相同的名稱是有意義的。然而,當我嘗試使用Visual Studio重命名的方法,我得到這樣的警告:爲什麼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()」的方法,但不會有一個不同的命名空間,這是一個非問題?

回答

15

這與LINQ有關。

當您在LINQ查詢中使用「Join」關鍵字時,C#編譯器將生成對名爲Join的方法的調用。通常這個調用會被解析爲其中一個LINQ擴展方法。但是,如果您使用與LINQ方法相同的簽名定義自己的方法,編譯器將使用您的方法。警告的目的是讓你知道如果你進行額外的重構,編譯器生成的方法調用將不會被修改。

除非您正在嘗試編寫自定義LINQ提供程序,否則忽略該錯誤是安全的。

+3

哇,那個錯誤根本就沒有說清楚!謝謝你讓我知道發生了什麼事。我以爲我在做一些非常糟糕的事情...... – 2009-06-05 23:54:18

相關問題