程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(6)(2)

C#泛型秘訣(6)(2)

編輯:關於C語言
.10 使用相應的泛型版本替換Hashtable

問題

您希望通過使用相應的泛型版本替換所有Hashtable來增強應用程序性能並使得代碼更為易讀。當您發現這些數據結構中存放結構體和值類型會導致裝箱/拆箱操作,這就變得非常有必要了。

解決方案

替換所有已存在的System.Collections.Hashtable類為速度更快的System.Collections.Generic.Dictionary泛型類。

這有一個使用System.Collections.Hashtable對象的簡單例子:

public static void UseNonGenericHashtable()
  {
    // 創建並填充一個Hashtable.
    Hashtable numbers = new Hashtable();
    numbers.Add(1, "one");  // 鍵會導致裝箱操作
    numbers.Add(2, "two");  // 鍵會導致裝箱操作
  
    // 在Hashtable顯示所有的鍵/值對.
    // 在每次迭代中都會因為鍵導致一個拆箱操作
    foreach (DictionaryEntry de in numbers)
    {
      Console.WriteLine("Key: " + de.Key + "\tValue: " + de.Value);
    }
    numbers.Clear();
}

下面是相同的代碼使用了System.Collections.Generic.Dictionary<T,U>對象:

public static void UseGenericDictionary()
  {
    // 創建並填充字典.
    Dictionary<int, string> numbers = new Dictionary<int, string>();
    numbers.Add(1, "one");
    numbers.Add(2, "two");
    // 顯示字典中的所有鍵值對.
    foreach (KeyValuePair<int, string> kvp in numbers)
    {
      Console.WriteLine("Key: " + kvp.Key + "\tValue: " + kvp.Value);
    }
    numbers.Clear();
}

討論

對於應用程序中簡單的Hashtable實現,這種替換將十分容易。但有些地方需要注意,如泛型Dictionary類沒有實現ICloneable接口,而Hashtable類實現了。

表4-2顯示了兩個類中的等價成員:

表4-2 Hashtable和泛型Dictionary類的等價成員

Hashtable 類的成員 泛型 Dictionary 類的相應成員 N/A Comparer 屬性 Count屬性 Count屬性 IsFixedSize屬性 ((IDictionary)myDict).IsFixedSize IsReadOnly屬性 ((IDictionary)myDict).IsReadOnly IsSynchronized屬性 ((IDictionary)myDict).IsSynchronized Item屬性 Item屬性 Keys屬性 Keys屬性 SyncRoot屬性 ((IDictionary)myDict).SyncRoot Values屬性 Values屬性 Add 方法 Add方法 Clear方法 Clear方法 Clone方法 在重載構造方法中接收一個 IDictionary<T,U> 類型 Contains方法 ContainsKey方法 ContainsKey方法 ContainsKey方法 ContainsValue方法 ContainsValue方法 CopyTo方法 ((ICollection)myDict).CopyTo(arr,0) Remove方法 Remove方法 Synchronized static方法 lock(myDictionary.SyncRoot) {…} N/A TRyGetValue方法
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved