Подтвердить что ты не робот

Нечувствительный к регистру список

Мне нужен регистр, нечувствительный к регистру, или заданный тип коллекции (строк). Какой самый простой способ создать его? Вы можете указать тип сравнения, которое вы хотите получить по клавишам Словаря, но я не могу найти ничего похожего на список.

4b9b3361

Ответ 1

Похоже, что можно использовать класс 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;
    }
}

Ответ 2

Предполагая, что вы используете .NET 3.5, вы можете просто использовать:

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

... или что-то подобное, где вы также подберете соответствующую настройку культуры.

В большинстве случаев список сравнения не имеет смысла, только если вы вызываете IndexOf и связанные с ним методы. Я не верю, что какой-либо способ указать сравнение для этого. Однако вы можете использовать List<T>.Find с предикатом.

Ответ 3

Используйте Linq, это добавляет новый метод .Compare

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

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

MyList.Add(...)

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

Ответ 4

Аналогичная история здесь, где вы хотите проверить contains

например.

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

Ответ 5

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

Просто запишите свои буквы в верхнем регистре и выполните поиск VUPUE UPPERCASE