c# - 如何从现有列表中获取与关键字匹配的项目列表并忽略大小写(不区分大小写)?

标签 c# .net xamarin xamarin.forms

我在 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.OrdinalIgnoreCaseStringComparison.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 没有接受 StringComparisonStringComparer 的重载,但您可以使用IndexOfStringComparison,并使用以下事实:如果未找到子字符串,则 IndexOf 返回 -1,否则返回子字符串的索引否则使用较大的字符串。所以你可以使用:

var citiesSearched = allCities.Where(
    c => c.IndexOf(SearchBar.Text, StringComparison.OrdinalIgnoreCase) != -1);

如果您希望它对特定 CultureInfo 区分文化,您可以使用 CultureInfo.CompareInfo 获取 CompareInfo,然后CompareInfo.IndexOfCompareOptions.IgnoreCase 执行区分区域性、不区分大小写的搜索。

关于c# - 如何从现有列表中获取与关键字匹配的项目列表并忽略大小写(不区分大小写)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59010323/

相关文章:

c# - 静态通用构建器

.net - 托管 C++ .NET 应用程序中未处理的托管异常的访问冲突问题

android - 服务没有按应有的方式唤醒设备

c# - 在 Xamarin 中添加自定义单元格

c# - 方法 method1 和 method2 使用相同的 SOAPAction

c# - Xamarin.Android SQLite.NET 重复列名称 : ID

C# Excel 如何使用单元格链接添加超链接

c# - 使用反向代理通过 SSL(https) 配置 IIS 托管的 WCF 服务

c# - 哪个结构更好,将事件处理程序作为参数传递,或监听事件触发?

c# - 我可以在 LineSeries 图表上绘制垂直线吗?