不区分大小写的列表

时间:2009-10-07 10:26:18

标签: c# .net collections

我需要一个不区分大小写的列表或集合类型的集合(字符串)。创建一个最简单的方法是什么?您可以在Dictionary的键上指定要获得的比较类型,但是我找不到类似于List的任何类型。

4 个答案:

答案 0 :(得分:31)

假设您使用的是.NET 3.5,您可以使用:

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

...或类似的东西,你也可以选择适当的文化背景。

只有在您调用IndexOf和相关方法时,列表才真正具有大部分比较的想法。我不相信有任何方法可以指定用于此的比较。但是,您可以将List<T>.Find与谓词一起使用。

答案 1 :(得分:20)

使用Linq,这为.Compare

添加了一个新方法
using System.Linq;
using System.Collections.Generic;

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

MyList.Add(...)

if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) {
    //found
}

答案 2 :(得分:3)

看起来可以利用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;
    }
}

答案 3 :(得分:2)

类似的故事在这里寻找contains

e.g。

public static bool Contains(this string source, string toCheck, StringComparison comp)
        {
            return source.IndexOf(toCheck, comp) >= 0;
        }