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

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

編輯:關於C語言

表4-1中的幾個ArrayList的成員和泛型List的成員並非一一對應。從屬性開始說,只有Capacity,Count和Item屬性兩個類中都存在。為了彌補List類中的幾個缺失的屬性,可以把它顯式轉換為Ilist接口。下面的代碼演示了如何使用這些顯式轉換以獲得缺失的屬性。

List<int> numbers = new List<int>();
  Console.WriteLine(((IList)numbers).IsReadOnly);
  Console.WriteLine(((IList)numbers).IsFixedSize);
  Console.WriteLine(((IList)numbers).IsSynchronized);
  Console.WriteLine(((IList)numbers).SyncRoot);

注意,由於缺少返回同步版本的泛型List代碼和缺少返回固定尺寸的泛型List代碼,IsFixedSize和IsSynchronized屬性將總是返回false。SyncRoot屬性被調用時將總是返回相同的對象,本質上這個屬性返回this指針。微軟已經決定從所有泛型集合類中去除創建同步成員的功能。做為代替,他們推薦使用lock關鍵字去鎖住整個集合或其他類型的同步對象來滿足您的需要。

靜態的ArrayList.Repeat在泛型List中沒有對應的方法。做為代替,您可以使用下面的泛型方法:

public static void Repeat<T>(List<T> list, T obj, int count)
  {
    if (count < 0)
    {
      throw (new ArgumentException(
          "參數count 必須大於或等於零"));
    }
    for (int index = 0; index < count; index++)
    {
      list.Add(obj);
    }
}

這個泛型方法有三個參數:

list

泛型List對象

obj

將被以指定次數添加進泛型List中的對象

count

把obj添加進泛型類中的次數

因為Clone方法也沒有出現在泛型List類中(因為這個類並沒有實現Icloneable接口),您可以使用泛型List類的GetRange方法做為替代。

List<int> oldList = new List<int>();

// 給oldList添加元素…

List<int> newList = oldList.GetRange(0, oldList.Count);

GetRange方法對List對象中一個范圍的元素執行淺拷貝(跟ArrayList中的Clone方法接近)。在此例中這個范圍是所有元素。

提示:ArrayList默認的初始容量是16個元素,而List<T>的默認初始容量為4個元素。這意味著當添加第17個元素時,List<T>不得不改變尺寸(重新分配內存)3次,而ArrayList只重新分配一次。這一點在評估應用程序性能時需要被考慮。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved