(轉)asp.net集合中的泛型集合和非泛型集合


泛型最常見的用途是泛型集合,命名空間System.Collections.Generic 中包含了一些基於泛型的集合類,使用泛型集合類可以提供更高的類型安全性,還有更高的性能,避免了非泛型集合的重復的裝箱和拆箱。
    很多非泛型集合類都有對應的泛型集合類,下面是常用的非泛型集合類以及對應的泛型集合類:
非泛型集合類 泛型集合類
ArrayList List<T>
HashTable DIctionary<T>
Queue Queue<T>
Stack Stack<T>
SortedList SortedList<T>


我們用的比較多的非泛型集合類主要有 ArrayList類 和 HashTable類。我們經常用HashTable 來存儲將要寫入到數據庫或者返回的信息,在這之間要不斷的進行類型的轉化,增加了系統裝箱和拆箱的負擔,如果我們操縱的數據類型相對確定的化 用 Dictionary<TKey,TValue> 集合類來存儲數據就方便多了,例如我們需要在電子商務網站中存儲用戶的購物車信息( 商品名,對應的商品個數)時,完全可以用 Dictionary<string, int> 來存儲購物車信息,而不需要任何的類型轉化。

    下面是簡單的例子,包括聲明,填充鍵值對,移除鍵值對,遍歷鍵值對

 

 Dictionary< stringstring> myDic =  new Dictionary< stringstring>();
     myDic.Add( " aaa "" 111 ");
     myDic.Add( " bbb "" 222 ");
     myDic.Add( " ccc "" 333 ");
     myDic.Add( " ddd "" 444 ");
     // 如果添加已經存在的鍵,add方法會拋出異常
     try
    {
         myDic.Add( " ddd ", " ddd ");
     }
     catch (ArgumentException ex)
    {
         Console.WriteLine( " 此鍵已經存在: " + ex.Message);
     }
     // 解決add()異常的方法是用ContainsKey()方法來判斷鍵是否存在
     if (!myDic.ContainsKey( " ddd "))
    {
         myDic.Add( " ddd "" ddd ");
     }
     else
    {
         Console.WriteLine( " 此鍵已經存在: ");    
     }
    
     // 而使用索引器來負值時,如果建已經存在,就會修改已有的鍵的鍵值,而不會拋出異常
     myDic [ " ddd "]= " ddd ";
     myDic[ " eee "] =  " 555 ";
    
     // 使用索引器來取值時,如果鍵不存在就會引發異常
     try
    {
         Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + myDic[ " fff "]);
     }
     catch (KeyNotFoundException ex)
    {
         Console.WriteLine( " 沒有找到鍵引發異常: " + ex.Message);
     }
     // 解決上面的異常的方法是使用ContarnsKey() 來判斷時候存在鍵,如果經常要取健值得化最好用 TryGetValue方法來獲取集合中的對應鍵值
     string value =  "";
     if (myDic.TryGetValue( " fff "out value))
    {
         Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + value );
     }
     else
    {     
         Console.WriteLine( " 沒有找到對應鍵的鍵值 "); 
     }
    
     // 下面用foreach 來遍歷鍵值對
    
// 泛型結構體 用來存儲健值對
     foreach (KeyValuePair< stringstring> kvp  in myDic)
    {
         Console.WriteLine( " key={0},value={1} ", kvp.Key, kvp.Value);
     }
     // 獲取值得集合
     foreach ( string s  in myDic.Values)
    {
         Console.WriteLine( " value={0} ", s);
     }
     // 獲取值得另一種方式
     Dictionary< stringstring>.ValueCollection values = myDic.Values;
     foreach ( string s  in values)
    {
         Console.WriteLine( " value={0} ", s);
     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM