对不起,如果以前曾经问过这个问题,我已经搜索过了,但找不到任何可以解决我困惑的事情。
如果我编写以下代码,我收到编译错误No overload for method 'Contains' takes 2 arguments
,但IntelliSense建议有一个带有2个参数的重载(screenshot here):
string s = "Hello";
if (s.Contains('h', StringComparer.OrdinalIgnoreCase))
{
Console.WriteLine("True!");
}
我传递了一个 char 作为第一个参数,而StringComparer
实现了IEqualityComparer
所以我没有弄错。
任何人都可以解释为什么我会收到错误吗?
答案 0 :(得分:1)
StringComparer使用类型参数字符串实现IEqualityComparer<string>
,但期望参数为IEqualityComparer<char>
,类型参数为char。
这些类型仍然不兼容。
阅读有关泛型类型参数的内容: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-type-parameters