我正在尝试填充包含用户提供的字母的所有结果。
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
的最佳方法是什么?
谢谢。
答案 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
的其他重载,例如String
和StringComparison
参数的重载。