我在名为
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.
我可以很好地重命名该方法,并且不会导致构建错误或编译器警告。这样做安全吗?还是应该避免使用具有此名称的方法?
看到这个错误后,我打开 Reflector 看看是否可以找出 .NET 是否有一个内部“
ArrayUtil.Join()
”或它的任何变体,但它看起来不像。即使有一个“ArrayUtil.Join()
”方法,使用不同的命名空间不会让这成为一个问题吗?
这与 LINQ 有关。
当您在 LINQ 查询中使用“Join”关键字时,C# 编译器将生成对名为 Join 的方法的调用。通常,调用会解析为 LINQ 扩展方法之一。但是,如果您使用与 LINQ 方法相同的签名定义自己的方法,则编译器将使用您的方法。该警告的目的是让您知道,如果进行额外的重构,编译器生成的方法调用将不会被修改。
除非您尝试编写自定义 LINQ 提供程序,否则可以安全地忽略该错误。