Мне нужен регистр, нечувствительный к регистру, или заданный тип коллекции (строк). Какой самый простой способ создать его? Вы можете указать тип сравнения, которое вы хотите получить по клавишам Словаря, но я не могу найти ничего похожего на список.
Нечувствительный к регистру список
Ответ 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