2009-10-07 19 views
18

Necesito una lista insensible a mayúsculas y minúsculas o un tipo de colección (de cadenas). ¿Cuál es la forma más fácil de crear uno? Puede especificar el tipo de comparación que desea obtener en las teclas de un diccionario, pero no puedo encontrar nada similar para una lista.Una lista insensible a mayúsculas y minúsculas

Respuesta

3

se parece a su posible aprovechar la clase KeyedCollection:

public class Set<T> : KeyedCollection<T,T> 
{ 
    public Set() 
    {} 

    public Set(IEqualityComparer<T> comparer) : base(comparer) 
    {} 

    public Set(IEnumerable<T> collection) 
    { 
     foreach (T elem in collection) 
     { 
      Add(elem); 
     } 
    } 

    protected override T GetKeyForItem(T item) 
    { 
     return item; 
    } 
} 
31

Suponiendo que está utilizando .NET 3.5, sólo puede utilizar:

var strings = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); 

... o algo similar, en los que desea elegir el cultivo apropiado establecer también.

Una lista realmente no tiene la idea de una comparación en su mayor parte, solo cuando llama al IndexOf y métodos relacionados. No creo que haya ninguna forma de especificar la comparación para usar para eso. Sin embargo, podría usar List<T>.Find con un predicado.

+1

Estoy atascado con .Net 2 tristemente :( – Grzenio

2

historia similar aquí buscabas para comprobar si hay contains

por ejemplo,

public static bool Contains(this string source, string toCheck, StringComparison comp) 
     { 
      return source.IndexOf(toCheck, comp) >= 0; 
     } 
20

utilizar LINQ, esto se suma un nuevo método para ¡Compare

using System.Linq; 
using System.Collections.Generic; 

List<string> MyList = new List<string>(); 

MyList.Add(...) 

if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) { 
    //found 
} 
+0

No necesita 'Linq' para utilizar el método Contiene –

+0

@ geo1701: pero ** necesita ** 'using System.Linq' para obtener la nueva sobrecarga con' StringComparer'! –

+0

Gracias, buena respuesta, esperaba que hubiera una extensión, en lugar de tener que escribir la mía. ¡De lo contrario, no habría sabido dónde mirar! – Abacus

0
var Addresses = Pr.Where(a = >a.Key.ToUpper() == "KEY VALUE").ToList(); 

Sólo hacen sus claves en mayúsculas y búsqueda SUPERIOR DE VALOR

+0

Esto es EXACTAMENTE el truco que quería evitar. – Grzenio

Cuestiones relacionadas