【发布时间】:2021-11-19 01:00:59
【问题描述】:
[注意:有another question about the same error-message,但问题的根本原因有点不同,那里的答案都不适用于以下代码。]
我有这个代码:
string localComputerName = Environment.MachineName;
foreach (StatsServer server in servers)
{
if (localComputerName.Equals(server, StringComparison.OrdinalIgnoreCase)) {
...
}
}
这在调用Equals 时给了我这个编译错误:
Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead
我期待它使用string.Equals(string, StringComparison),这是一个实例方法(不是静态方法);为什么编译器认为我想要 object.Equals(object, object) 代替?
【问题讨论】:
-
字符串没有方法
Equals(object, StringComparison)。它不存在:referencesource.microsoft.com/#mscorlib/system/string.cs -
@OlivierRogier,但它被重载到所有对象上。我的 POCO 也没有声明静态
Equals方法,但它仍在自动完成列表中。 docs.microsoft.com/en-us/dotnet/api/… -
不,您要调用的方法不存在您想要的签名,因此您的自动回答解决了您的问题。
-
@OlivierRogier,是的。 docs.microsoft.com/en-us/dotnet/api/…
-
@OlivierRogier,不,
StatsServer不是字符串,这就是我在回答中解决的问题。被比较的两个对象必须是相同的数据类型,否则您会收到此错误,Visual Studio 可能会为您指明错误的方向。
标签: c# string visual-studio comparison