I am using the Array.Contains method on a string array. How can I make that case-insensitive?
5 Answers
array.Contains("str", StringComparer.OrdinalIgnoreCase);
Or depending on the specific circumstance, you might prefer:
array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
4 Comments
CurrentCulture), you should be using Ordinal rather than InvariantCulture.InvariantCulture. Use of any of the three choices above depends on the circumstance. I don't object to your reordering, but I'm removing the "probably not" comment. It's already made clear in the answer that you should pick the one that works for you in the current situation.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, needing:
using System;
using System.Linq;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<string>)mydotNet2Array).Contains(“str”) ) {}As the Contains() method is part of the IList interface, this works not only with arrays, but also with lists, etc.
Comments
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<string>.Create(a => a.ToLower()))
1 Comment
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true