C# 将contains与不变量cultureignorecase函数c一起使用#

C# 将contains与不变量cultureignorecase函数c一起使用#,c#,contains,string-comparison,C#,Contains,String Comparison,我正在尝试填充包含用户提供的字母的所有结果 foreach (var item in entries.PhonebookList.Where(ab => ab.FirstName.Contains(fName, StringComparison.InvariantCultureIgnoreCase))) { Console.WriteLine("Record: {0} {1} {2} ", item.ItemNumber, item.FirstName, item.LastNa

我正在尝试填充包含用户提供的字母的所有结果

foreach (var item in entries.PhonebookList.Where(ab => ab.FirstName.Contains(fName, StringComparison.InvariantCultureIgnoreCase)))
{
    Console.WriteLine("Record: {0}  {1}  {2} ", item.ItemNumber, item.FirstName, item.LastName);
}
但是我在
Contains
方法中得到了一个错误

“没有方法“Contains”的重载包含2个参数”

使用
Contains
StringComparison.invariantCultureInogoreCase
方法的最佳方法是什么


谢谢。

根据文档,您应该使用
string.IndexOf(string,StringComparison)

所以基本上是:

    var entries = new 
    {
      PhonebookList = new[]
      {
        new { ItemNumber = 1, FirstName = "Leonard", LastName = "Hofstadter" }, 
        new { ItemNumber = 2, FirstName = "Sheldon", LastName = "Cooper" }, 
        new { ItemNumber = 3, FirstName = "Howard", LastName = "Wolowitz" }, 
        new { ItemNumber = 4, FirstName = "Sheng", LastName = "?" }, 
      }
    };
    
    var fName = "she";
    foreach (var item in entries.PhonebookList.Where(ab => ab.FirstName.IndexOf(fName, StringComparison.InvariantCultureIgnoreCase) >= 0))
    {
        Console.WriteLine("Record: {0} {1} {2}", item.ItemNumber, item.FirstName, item.LastName);
    }
返回:

记录:2谢尔顿库珀

记录:4升


如果您经常需要一个带有不同
StringComparison
Contains
,文档还提供了一个扩展方法,您可以像
Contains
一样使用它(请参见提供的链接中的给定示例)。

您应该使用
String.IndexOf
方法,而不是
Contains
。如果您对当前实例中子字符串值的位置感兴趣,可以调用
IndexOf
方法来获取其第一次出现的起始位置,也可以调用
LastIndexOf
方法来获取其最后一次出现的起始位置<如果在字符串实例中找到子字符串,则使用code>IndexOf(String)方法。此外,您还可以根据自己的目的使用
String.IndexOf
的其他重载,例如带有
String
StringComparison
参数的重载。

fName-
String
的类型是什么?您确定希望
包含
等于
吗?是的,我需要包含。例如,我有盛和谢尔顿的名字。当我使用Equals并提供“she”作为fName的参数时。它不会显示Sheng和Sheldon,因为它不符合要求的值。我没有得到任何错误。我得到了同样的结果。如果我使用“she”作为fName变量的参数。它没有显示预期的结果。我的名字中有Sheng和Sheldon。请参阅我更新的示例。我想你应该仔细检查你的名字字段是否真的包含你认为它们包含的名字。这就是我观察到的。如果我的fName的参数是“re”,我的名字是Breth Dioren Klarence Rey。将显示这些名称。但是,如果我使用“RE”。它们不会被显示。我用你的新例子检查了它。不管搜索词是什么,它对我都有效。电话簿的类型是什么?是否来自EntityFramework/NHibernate/ORM映射器查询,即IQueryable类型?如果是,您可能需要更改DB表架构(请参阅).public List PhonebookList{get;set;}