C# &引用;“无重载”接受2个参数;但是IntelliSense显示有2个参数的重载

C# &引用;“无重载”接受2个参数;但是IntelliSense显示有2个参数的重载,c#,visual-studio,intellisense,C#,Visual Studio,Intellisense,很抱歉,如果以前有人问过这个问题,我已经搜索过了,但是找不到任何能回答我困惑的东西 如果我编写以下代码,我会收到一个编译器错误,它说方法'Contains'的No重载需要2个参数,但IntelliSense建议有一个重载需要2个参数(): 我正在传递一个char作为第一个参数,并且StringComparer实现了IEqualityComparer,所以我不知道哪里出了问题 有人能解释我出错的原因吗?StringComparer使用类型参数字符串实现IEqualityComparer,但预期参数

很抱歉,如果以前有人问过这个问题,我已经搜索过了,但是找不到任何能回答我困惑的东西

如果我编写以下代码,我会收到一个编译器错误,它说
方法'Contains'的No重载需要2个参数
,但IntelliSense建议有一个重载需要2个参数():

我正在传递一个char作为第一个参数,并且
StringComparer
实现了
IEqualityComparer
,所以我不知道哪里出了问题


有人能解释我出错的原因吗?

StringComparer使用类型参数字符串实现
IEqualityComparer
,但预期参数是使用类型参数char的
IEqualityComparer
。 这些类型仍然不兼容

了解泛型类型参数:

但为什么它不说我的论点是错误的呢?相反,它说这种方法不存在。这就是让我困惑的地方think@JohnnyMyMan它通常会说哪个参数是错误的,它似乎被扩展方法弄糊涂了,而且有一个常规的
字符串。Contains
方法也可能会增加问题。好吧,我认为这对我来说是有意义的。谢谢@约翰尼曼:朱哈尔是对的。错误消息是,
String.Contains的重载不接受两个参数,这是正确的。扩展方法不是传统意义上的重载。如果仔细查看屏幕截图,可以预期相等比较是针对
char
的,但是对于
string
使用相等比较。但是
string
也是
IEnumerable
,对吗?所以我应该能够调用IEnumberable.Contains(…),对吗?@Johnnyman实际上它是一个
IEnumerable
,但是你可以使用这个扩展方法,但是它需要
IEqualityComparer
StringComparer。OrdinalIgnoreCase
IEqualityComparer
。@juharr非常感谢!一种方法是:
if(s.Select(x=>x.ToString()).Contains(“h”,StringComparer.OrdinalIgnoreCase))
string s = "Hello";
if (s.Contains('h', StringComparer.OrdinalIgnoreCase))
{
    Console.WriteLine("True!");
}