2019-07-21 17:21

C# 讓 Dequeue 更方便的擴充方法

  1. void Main() 
  2. { 
  3.    var queue = new Queue<int>(); 
  4.  
  5.    for (int i = 0; i < 10; i++) { queue.Enqueue(i); } 
  6.    string.Join(",", queue).Dump(); /* 0,1,2,3,4,5,6,7,8,9 */ 
  7.  
  8.  
  9.    var take = queue.EnumerateDequeue().Take(4).ToList(); 
  10.    string.Join(",", take).Dump(); /* 0,1,2,3 */ 
  11.    string.Join(",", queue).Dump(); /* 4,5,6,7,8,9 */ 
  12.  
  13.  
  14.    var take2 = queue.EnumerateDequeue().Take(40).ToList(); 
  15.    string.Join(",", take2).Dump(); /* 4,5,6,7,8,9 */ 
  16.    string.Join(",", queue).Dump(); /* */ 
  17. } 
  18.  
  19.  
  20.  
  21. public static class QueueExtensions 
  22. { 
  23.  
  24.   public static IEnumerable<T> EnumerateDequeue<T>(this Queue<T> source) 
  25.   { 
  26.       while (source.Count > 0) { yield return source.Dequeue(); } 
  27.   } 
  28.  
  29.   public static IEnumerable<T> EnumerateDequeue<T>(this ConcurrentQueue<T> source) 
  30.   { 
  31.       T outValue; 
  32.       while (source.TryDequeue(out outValue)) { yield return outValue; } 
  33.   } 
  34.  
  35. } 

0 回應: