Beispiel #1
0
 /// <summary>
 /// Inserts the specified list of items and the end of the queue. They will be next items popped.
 /// They will pop off the list in the same order they exist in 'items' (i.e, they are inserted in reverse order).
 /// </summary>
 /// <param name="items"></param>
 public void InsertRange(IList<CleanupWorkItem> items)
 {
     lock (_sync) {
         ReverseEnumerable<CleanupWorkItem> reversed = new ReverseEnumerable<CleanupWorkItem>(new System.Collections.ObjectModel.ReadOnlyCollection<CleanupWorkItem>(items));
         foreach (CleanupWorkItem item in reversed)
             queue.AddFirst(item);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Inserts the specified list of items and the end of the queue. They will be next items popped.
 /// They will pop off the list in the same order they exist in 'items' (i.e, they are inserted in reverse order).
 /// </summary>
 /// <param name="items"></param>
 public void InsertRange(IList <CleanupWorkItem> items)
 {
     lock (_sync) {
         ReverseEnumerable <CleanupWorkItem> reversed = new ReverseEnumerable <CleanupWorkItem>(new System.Collections.ObjectModel.ReadOnlyCollection <CleanupWorkItem>(items));
         foreach (CleanupWorkItem item in reversed)
         {
             queue.AddFirst(item);
         }
     }
 }
        public No19_SpecializedGenericsUsingTypeCheckInRuntime()
        {
            //目的:
            //①ジェネリクスを取り扱う型に応じて、処理の記述を変えることで結果的にアルゴリズムをより良いものにする

            //概要:
            //--------------------------------------------------------------------------------------
            //ジェネリクスを利用する型(IEnumerable,ICollection.IListなど)に応じて、型チェックを行い処理を分岐させる
            //結果的に外からみたら呼び出し方だが、中身は型に対して特化していて、別処理で性能が出ている状態を作る

            //利用時
            var array      = new[] { 1, 2, 3, 4 };
            var enumerable = array as IEnumerable <int>;
            var collection = array as ICollection <int>;
            var list       = array as IList <int>;
            var str        = "1234";

            //IEnumerable
            var reversedEnumerable = new ReverseEnumerable <int>(enumerable);

            foreach (var item in reversedEnumerable)
            {
                Console.WriteLine(item);
            }

            //ICollection
            var reversedCollection = new ReverseEnumerable <int>(collection);

            foreach (var item in reversedCollection)
            {
                Console.WriteLine(item);
            }

            //IList
            var reversedList = new ReverseEnumerable <int>(list);

            foreach (var item in reversedList)
            {
                Console.WriteLine(item);
            }

            //IEnumerable<char>
            var reversedString = new ReverseEnumerable <char>(str);

            foreach (var item in reversedString)
            {
                Console.WriteLine(item);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Test ReverseEnumerator
        /// </summary>
        static void TestReverse()
        {
            // ReverseEnumerator attend un IList<>, aussi on récupère le tableau comme IList.
            // Tous les tableaux .Net sont des IList<> donc il n'y a pas de problème de cast
            IList<Int32> list = GetItems();

            // Création de l'énumerable reverse
            IEnumerable<Int32> enumerable = new ReverseEnumerable<Int32>(list);

            // Parcours chaque élément dans elm
            foreach (int elm in enumerable)
            {
                // ..
                Console.WriteLine(elm);
            }

            // On parcours chaque élément mais en arrêtant la boucle quand on trouve l'élément 5
            foreach (int elm in enumerable)
            {
                if (elm == 5) break;
                // ..
                Console.WriteLine(elm);
            }
        }