2017-08-13 119 views
1

我试图填充所有包含用户提供的字母的结果。使用包含InvariantCultureIgnoreCase函数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方法中出现错误。

“不超载的方法‘包含’需要两个参数”

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

谢谢。

+0

'fName' - 'string'的类型是什么? –

+0

你确定要'包含'但是'等于'吗? –

+0

是的,我需要包含。例如,我有Sheng和Sheldon作为名字。当我使用Equals时,我提供“she”作为fName的参数。它不会显示盛和谢尔登,因为它没有达到要求的价值。 – anonymousRey

回答

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谢尔顿·库珀

战绩:4胜?

如果你经常需要用不同的StringComparison文档还提供了可以实现的扩展方法Contains,使用它像Contains(见提供的链接给定的例子)。

+0

它没有为我工作。 – anonymousRey

+0

你会得到什么错误? – ckuri

+0

我没有收到任何错误。我得到了同样的结果。如果我使用“她”作为fName变量的参数。它没有显示预期的结果。我有Sheng和Sheldon的名字。 – anonymousRey

0

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