I am using the Array.Contains
method on a string array. How can I make that case-insensitive?
问题:
回答1:
array.Contains("str", StringComparer.OrdinalIgnoreCase);
Or depending on the specific circumstance, you might prefer:
array.Contains("str", StringComparer.CurrentCultureIgnoreCase); array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
回答2:
Some important notes from my side, or at least putting some distributed info at one place- concerning the tip above with a StringComparer like in:
if (array.Contains("str", StringComparer.OrdinalIgnoreCase)) {}
array.Contains()
is a LINQ extension method and therefore works by standard only with .NET 3.5 or higher.But: in .NET 2.0 the simple
Contains()
method (without taking case insensitivity into account) is at least possible like this, with a cast:if ( ((IList
)mydotNet2Array).Contains(“str”) ) {} Addition to 1.: For the reason given above, the
StringComparer
in 1. works only with the following namespace inclusions (tested with .NET 3.5):using System;
using System.Linq;
Addition to 2.: The
Contains()
method does not only work with arrays, it also works with lists :-)
回答3:
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true
回答4:
Implement a custom IEqualityComparer that takes case-insensitivity into account.
Additionally, check this out. So then (in theory) all you'd have to do is:
myArray.Contains("abc", ProjectionEqualityComparer.Create(a => a.ToLower()))