【发布时间】:2009-10-07 10:26:17
【问题描述】:
我需要一个不区分大小写的列表或集合类型(字符串)。创建一个最简单的方法是什么?您可以指定要对 Dictionary 的键进行比较的类型,但我找不到 List 的类似内容。
【问题讨论】:
标签: c# .net collections
我需要一个不区分大小写的列表或集合类型(字符串)。创建一个最简单的方法是什么?您可以指定要对 Dictionary 的键进行比较的类型,但我找不到 List 的类似内容。
【问题讨论】:
标签: c# .net collections
使用 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 获得新的重载!
假设您使用的是 .NET 3.5,您可以使用:
var strings = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
...或类似的东西,您也可以在其中选择适当的文化设置。
列表在大多数情况下实际上并没有比较的想法 - 只有当您调用 IndexOf 和相关方法时。我不相信有任何方法可以指定要使用的比较。但是,您可以将List<T>.Find 与谓词一起使用。
【讨论】:
看起来可以利用 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;
}
}
【讨论】:
类似的故事在这里寻找contains
例如
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
【讨论】: