这是我的问题:
m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country.ToLower());
country
是包含上述赋值的方法的字符串和参数。 CountryNames
是一个字符串列表。如何在ToLower
中的每个字符串上调用CountryNames
,以便我获得此查询的有效匹配。有没有更好的方法来使用LINQ进行不区分大小写的比较?
答案 0 :(得分:7)
是的,您可以为Contains
方法指定IEqualityComparer<T>
。例如,您可以使用StringComparer.CurrentCultureIgnoreCase
:
m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country, StringComparer.CurrentCultureIgnoreCase));
这也避免了通过调用ToLower
创建的临时字符串。
答案 1 :(得分:0)
像这样:
m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Exists(cn => cn.ToLower() == country.ToLower());
答案 2 :(得分:0)
您可以像这样使用.Any
:
m_SelectedHandler = m_ListOfHandlers
.SingleOrDefault(h => h.CountryNames
.Any(countryName => countryName.ToLower() == country.ToLower()));
或将==
替换成`.Equals,如:
countryName.Equals(country, StringComparison.OrdinalIgnoreCase)
进行不区分大小写的匹配
答案 3 :(得分:0)
你可以h.CountryNames.Any(x => StringComparer.CurrentCultureIgnoreCase.Equals(x, country)