Dot-Net
使用帶有字元串鍵和不區分大小寫的搜尋的雜湊表/字典
想知道這是否可能。
我們有一個第 3 方庫,其中包含有關使用者的辨識資訊…
與庫的主要互動是通過一個以字元串為鍵的 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);您可以在此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());