使用包含InvariantCultureIgnoreCase函数c#

时间:2017-08-13 11:45:58

标签: 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.LastName);
}

但我在Contains方法中遇到错误。

  

“方法没有重载'包含'需要2个参数”

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

谢谢。

2 个答案:

答案 0 :(得分:2)

根据文档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);
    }

返回:

  

记录:2 Sheldon Cooper

     记录:4盛?

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

答案 1 :(得分:0)

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