我需要一个不区分大小写的字符串集合类型(列表或集合)。有什么最简单的方法可以创建它?你可以指定字典键的比较类型,但是我找不到类似的东西用于列表。
假设你正在使用 .NET 3.5,你可以直接使用:
var strings = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
...或类似的东西,您可以选择适当的文化设置。
列表在大多数情况下没有比较的概念 - 只有当您调用IndexOf
和相关方法时才有。我认为没有任何方法可以指定用于该比较的比较方式。但是,您可以使用带谓词的List<T>.Find
。
使用 Linq,这会向 .Compare 添加一个新方法。
using System.Linq;
using System.Collections.Generic;
List<string> MyList = new List<string>();
MyList.Add(...)
if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) {
//found
}
using System.Linq
才能获得带有StringComparer
的新重载! - marc_s看起来可以利用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;
}
}
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}