2009-10-07 14 views
18

Potrzebuję listy niewrażliwej na wielkość liter lub zestawu typów kolekcji (ciągów znaków). Jaki jest najłatwiejszy sposób na stworzenie? Możesz określić typ porównania, jaki chcesz uzyskać na kluczach Słownika, ale nie mogę znaleźć niczego podobnego dla Listy.Lista niewrażliwa na wielkość liter

Odpowiedz

3

Wygląda na jego możliwe wykorzystanie klasę 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

Zakładając, że używasz .NET 3.5, można po prostu użyć:

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

... lub coś podobnego, gdzie chcesz wybrać odpowiednie ustawienie, a także kulturę.

Lista tak naprawdę nie ma większego pojęcia o porównaniu - tylko wtedy, gdy zadzwonisz pod numer IndexOf i metody pokrewne. Nie sądzę, że istnieje sposób na określenie porównania do tego celu. Można jednak użyć List<T>.Find z predykatem.

+1

Utknąłem z .Net 2 niestety :( – Grzenio

2

podobną historię tutaj gdzie chce sprawdzić contains

np

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

używać LINQ, to dodaje nową metodę .Compare

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

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

MyList.Add(...) 

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

Nie potrzebujesz 'Linq', aby użyć metody Contains –

+0

@ geo1701: ale ** potrzebujesz ** 'using System.Linq', aby uzyskać nowe przeciążenie za pomocą' StringComparer'! –

+0

Dzięki, dobra odpowiedź, miałem nadzieję, że istnieje przedłużenie, zamiast pisać własne. W przeciwnym razie nie wiedziałbym, gdzie szukać! – Abacus

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

Tylko klucze wielkie litery i wyszukaj WIELKIEJ KOLEKCJI

+0

To jest DOKŁADNIE włamanie, którego chciałem uniknąć. – Grzenio

Powiązane problemy