问题 当我尝试重命名方法时,为什么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.

我可以很好地重命名该方法,它不会导致生成错误或编译器警告。这样做是否安全,或者我应该避免使用具有此名称的方法?

看到这个错误后,我打开了 反光 看看我是否能找到.NET内部“ArrayUtil.Join()“或者它的任何变化,它看起来都不像。即使有一个”ArrayUtil.Join()“虽然方法,不会有一个不同的命名空间使这成为一个非问题?


3474
2018-06-05 13:04


起源



答案:


这与LINQ有关。

当您在LINQ查询中使用“Join”关键字时,C#编译器将生成对名为Join的方法的调用。通常,调用将解析为LINQ扩展方法之一。但是,如果使用与LINQ方法相同的signatgure定义自己的方法,则编译器将使用您的方法。警告的目的是让您知道,如果进行额外的重构,则不会修改编译器生成的方法调用。

除非您尝试编写自定义LINQ提供程序,否则忽略该错误是安全的。


15
2018-06-05 23:15



哇,这个错误根本就没那么清楚!谢谢你让我知道发生了什么。我以为我做的事情真的很糟糕...... - Dan Herbert


答案:


这与LINQ有关。

当您在LINQ查询中使用“Join”关键字时,C#编译器将生成对名为Join的方法的调用。通常,调用将解析为LINQ扩展方法之一。但是,如果使用与LINQ方法相同的signatgure定义自己的方法,则编译器将使用您的方法。警告的目的是让您知道,如果进行额外的重构,则不会修改编译器生成的方法调用。

除非您尝试编写自定义LINQ提供程序,否则忽略该错误是安全的。


15
2018-06-05 23:15



哇,这个错误根本就没那么清楚!谢谢你让我知道发生了什么。我以为我做的事情真的很糟糕...... - Dan Herbert