Список без учета регистра - PullRequest
18 голосов
/ 07 октября 2009

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

Ответы [ 4 ]

31 голосов
/ 07 октября 2009

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

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

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

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

20 голосов
/ 25 февраля 2011

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

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

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

MyList.Add(...)

if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) {
    //found
}
3 голосов
/ 07 октября 2009

Похоже, можно использовать класс 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 голосов
/ 07 октября 2009

Подобная история здесь, где поиск содержит

, например

public static bool Contains(this string source, string toCheck, StringComparison comp)
        {
            return source.IndexOf(toCheck, comp) >= 0;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...