C# 如何使用LINQ对集合中的每个字符串调用ToLower()?

C# 如何使用LINQ对集合中的每个字符串调用ToLower()?,c#,linq,C#,Linq,我的问题是: m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country.ToLower()); country是包含上述赋值的方法的字符串和参数CountryNames是字符串列表。如何对CountryNames中的每个字符串调用ToLower,以便获得此查询的有效匹配项。是否有更好的方法使用LINQ进行不区分大小写的比较?如下所示: m_ListOfHandlers

我的问题是:

m_SelectedHandler = m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Contains(country.ToLower());
country
是包含上述赋值的方法的字符串和参数
CountryNames
是字符串列表。如何对
CountryNames
中的每个字符串调用
ToLower
,以便获得此查询的有效匹配项。是否有更好的方法使用LINQ进行不区分大小写的比较?

如下所示:

m_ListOfHandlers.SingleOrDefault(h => h.CountryNames.Exists(cn => cn.ToLower() == country.ToLower()); 

是的,您可以为该方法指定
IEqualityComparer
。例如,您可以使用:


这也避免了通过调用
ToLower

创建的临时字符串。您只需使用
。任何类似以下内容的

m_SelectedHandler = m_ListOfHandlers
    .SingleOrDefault(h => h.CountryNames
        .Any(countryName => countryName.ToLower() == country.ToLower()));
或者将
==
替换为`。类似这样的等式:

countryName.Equals(country, StringComparison.OrdinalIgnoreCase)

要进行不区分大小写的匹配,可以使用ToLower进行不区分大小写的比较==fail。
countryName.Equals(country, StringComparison.OrdinalIgnoreCase)