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!");
}