想知道这是否可能。
我们有一个第 3 方库,其中包含有关用户的识别信息...
与库的主要交互是通过一个以字符串为键的 HashTable,并返回该键的信息对象图。
问题是, key 显然是区分大小写的,但我们从用户浏览器获得的不一定与大小写匹配......(我们经常得到完全小写的 key )
我想知道是否可以对哈希表进行不区分大小写的键搜索。
例如
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 上获取有关 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/