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

C#泛型秘訣(3)(3)

編輯:關於C語言

非泛型版Queue和Stack類中存在Clone方法是因為只有它實現了Icolneable接口。但非泛型版Queue和Stack類實現的其他接口是一樣的。

一個彌補泛型版Queue和Stack類中不存在Clone方法的途徑是接收一個IEnumerable<T>類型。因為這是Queue和Stack類實現的接口之一,對於Queue對象來說,這非常容易實現,代碼如下:

public static void CloneQueue()
  {
    // 創建一個Queue對象.
    Queue<int> numericQueue = new Queue<int>();
    // 進隊
    numericQueue.Enqueue(1);
    numericQueue.Enqueue(2);
    numericQueue.Enqueue(3);
    // 創建一個克隆的numericQueue.
    Queue<int> clonedNumericQueue = new Queue<int>(numericQueue);
    // 這只是簡單地看一下裡面的值,並非出隊
    foreach (int i in clonedNumericQueue)
    {
      Console.WriteLine("foreach: " + i.ToString());
    }
    // 出隊並顯示項目
    Console.WriteLine(clonedNumericQueue.Dequeue().ToString());
    Console.WriteLine(clonedNumericQueue.Dequeue().ToString());
    Console.WriteLine(clonedNumericQueue.Dequeue().ToString());
}

方法的輸出結果如下:

foreach: 1
  foreach: 2
  foreach: 3
  1
  2
  3

對於Stack對象,其代碼如下:

public static void CloneStack()
  {
    // 創建一個泛型Stack對象
    Stack<int> numericStack = new Stack<int>();
    // 進棧
    numericStack.Push(1);
    numericStack.Push(2);
    numericStack.Push(3);
    // 克隆numericStack 對象.
    Stack<int> clonedNumericStack = new Stack<int>(numericStack);
    // 這只是簡單地看一下裡面的值,並非出棧
    foreach (int i in clonedNumericStack)
    {
      Console.WriteLine("foreach: " + i.ToString());
    }
    // 出棧並顯示項目
    Console.WriteLine(clonedNumericStack.Pop().ToString());
    Console.WriteLine(clonedNumericStack.Pop().ToString());
    Console.WriteLine(clonedNumericStack.Pop().ToString());
}

方法的輸出結果如下:

foreach: 1
  foreach: 2
  foreach: 3
  1
  2
  3

構造方法創建了一個新的Queue或Stack實例,並包含了IEnumerable<T>類型中所有元素的一份拷貝。

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