想知道这是否可能。

我们有一个第三方库,其中包含有关用户的标识信息...

与该库的主要交互是通过一个HashTable进行的,该HashTable用字符串键控,并返回该键信息的对象图。

问题是,密钥显然是区分大小写的,但是我们从用户浏览器中获得的信息不一定与大小写匹配...(我们通常将密钥完全小写)。

我想知道是否有可能对哈希表进行不区分大小写的键搜索。

例如

Hashtable ht = new Hashtable();
ht.Add("MyKey", "Details");

string result = ht["MyKey"];
string result = ht["MYKEY"];
string result = ht["mykey"];


如果有机会,我们可以向公司提交支持票证以添加此功能,是否还有其他任何支持该功能的DataStructures(即新的通用馆藏/词典)

最后,是否有可能重写System.String GetHashCode()方法,以
使所有大小写不变的字符串返回相同的哈希码...例如我想这是行不通的,因为string是密封类

如果有人有任何建议,请加油

最佳答案

使哈希表比较不区分大小写的代码

对于2.0、3.0、3.5

Hashtable ht = new Hashtable(StringComparer.InvariantCultureIgnoreCase);


您可以在this SO链接上获取有关InvariantCultureIgnoreCase与OrdinalIgnoreCase的信息

要么

Hashtable ht = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable();


由于不区分大小写的字典集合很常见,因此.NET Framework具有CollectionUtil类,该类支持创建不区分大小写的Hashtable和SortedList对象。通过调用CreateCaseInsensitiveHashtable或CreateCaseInsensitiveSortedList使用。

对于.Net 1.0(我不确定1.0是否支持StringComparer)

public class InsensitiveComparer : IEqualityComparer
{
    CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLowerInvariant().GetHashCode();
    }

    public new bool Equals(object x, object y)
    {
        if (_comparer.Compare(x, y) == 0)
        {
            return true;
        }

        else
       {
           return false;
       }
    }
}

Hashtable dehash = new Hashtable(new InsensitiveComparer());

关于.net - 将哈希表/字典与字符串键一起使用以及不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/856989/

10-11 02:26
查看更多