将包含与 InvariantCultureIgnoreCase 函数一起使用 c#

Use contains with InvariantCultureIgnoreCase function c#

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

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 方法中遇到错误。

"No overload for method 'Contains' takes 2 arguments"

ContainsStringComparison.InvariantCultureIgnoreCase 方法结合使用的最佳方法是什么?

谢谢。

根据文档 here,您应该改用 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);
    }

哪个returns:

Record: 2 Sheldon Cooper

Record: 4 Sheng ?

如果您经常需要具有不同 StringComparisonContains,该文档还提供了一个您可以实现的扩展方法,可以像 Contains 一样使用它(参见提供 link).

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