我需要一个不区分大小写的列表或集合类型(字符串)。创建一个列表或集合类型的最简单方法是什么?你可以指定你想在字典的键上得到的比较类型,但我找不到任何类似的列表。
frebpwbc1#
假设你使用的是.NET 3.5,你可以用途:
var strings = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
...或类似的东西,在那里你也会选择适当的文化背景。列表在大多数情况下并没有真正的比较概念-只有当你调用IndexOf和相关方法时。我不相信有任何方法可以指定用于比较的方法。但是,你可以使用List<T>.Find和 predicate 。
IndexOf
List<T>.Find
gcmastyq2#
使用Linq,这将向添加一个新方法。比较
using System.Linq; using System.Collections.Generic; List<string> MyList = new List<string>(); MyList.Add(...) if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) { //found }
0x6upsns3#
看起来可以利用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; } }
tgabmvqs4#
类似的故事在这里寻找检查contains例如
public static bool Contains(this string source, string toCheck, StringComparison comp) { return source.IndexOf(toCheck, comp) >= 0; }
4条答案
按热度按时间frebpwbc1#
假设你使用的是.NET 3.5,你可以用途:
...或类似的东西,在那里你也会选择适当的文化背景。
列表在大多数情况下并没有真正的比较概念-只有当你调用
IndexOf
和相关方法时。我不相信有任何方法可以指定用于比较的方法。但是,你可以使用List<T>.Find
和 predicate 。gcmastyq2#
使用Linq,这将向添加一个新方法。比较
0x6upsns3#
看起来可以利用KeyedCollection类:
tgabmvqs4#
类似的故事在这里寻找检查contains
例如