想知道这是否可能。
我们有一个第三方库,其中包含有关用户的标识信息...
与该库的主要交互是通过一个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/