Dot-Net

使用帶有字元串鍵和不區分大小寫的搜尋的雜湊表/字典

  • January 1, 1

想知道這是否可能。

我們有一個第 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());

引用自:https://stackoverflow.com/questions/856989