我在 Xamarin Forms 中有一个 SeachBar
,以及显示现有城市列表中的建议的 ListView
。我想获取与搜索关键字匹配的项目列表,无论它是大写还是小写。
为此我有一个列表
。我想从该列表中搜索项目并获取与搜索关键字匹配的项目的 List
,忽略大小写。我有一个用于获取与关键字匹配的项目列表的代码。我只是希望它包含与搜索关键字匹配的项目,忽略字母的大小写。
(请注意,这里我想返回匹配项的List
,而不是bool
是否存在匹配。所以请不要关闭此问题或标记类似于返回 bool
的那个。)
这是我的代码
List<string> allCities = new List<string> { "Mumbai", "Redmond", "Cambridge", "London", "Moscow", "New York", "Chicago"};
void SearchList()
{
string keyword = "mum";
var citiesSearched = allCities.Where(c => c.Contains(keyword));
ListView.ItemSource = citiesSearched;
}
我尝试过使用StringComparer.OrdinalIgnoreCase
和StringComparison.OrdinalIgnoreCase
,但我收到错误,Contains没有重载需要2个参数。
这是修改:
var citiesSearched = allCities.Where(c => c.Contains(keyword, StringComparer.OrdinalIgnoreCase));
// And
var citiesSearched = allCities.Where(c => c.Contains(keyword, StringComparison.OrdinalIgnoreCase));
在这两个语句中我都得到了错误。
最佳答案
String.Contains
没有接受 StringComparison
或 StringComparer
的重载,但您可以使用IndexOf
与 StringComparison
,并使用以下事实:如果未找到子字符串,则 IndexOf
返回 -1,否则返回子字符串的索引否则使用较大的字符串。所以你可以使用:
var citiesSearched = allCities.Where(
c => c.IndexOf(SearchBar.Text, StringComparison.OrdinalIgnoreCase) != -1);
如果您希望它对特定 CultureInfo
区分文化,您可以使用 CultureInfo.CompareInfo
获取 CompareInfo
,然后CompareInfo.IndexOf
与 CompareOptions.IgnoreCase
执行区分区域性、不区分大小写的搜索。
关于c# - 如何从现有列表中获取与关键字匹配的项目列表并忽略大小写(不区分大小写)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010323/