当我尝试重命名方法时,为什么 Visual Studio 告诉我有“编译器生成的引用”?

问题描述 投票:0回答:1

我在名为

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()
”方法,使用不同的命名空间不会让这成为一个问题吗?

c# visual-studio-2008 warnings
1个回答
16
投票

这与 LINQ 有关。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.