2007-08-22 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Wed, 22 Aug 2007 12:18:30 +0000 (12:18 -0000)
committerMarek Safar <marek.safar@gmail.com>
Wed, 22 Aug 2007 12:18:30 +0000 (12:18 -0000)
* Enumerable.cs: More SelectionMany.

svn path=/trunk/mcs/; revision=84612

mcs/class/System.Core/System.Linq/ChangeLog
mcs/class/System.Core/System.Linq/Enumerable.cs

index cc3dd68b5e6803068984dae0674a7648e639d2c4..1a964f3720f574f652b5bcf8647576c8f9eb59a5 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-22  Marek Safar <marek.safar@gmail.com>
+
+       * Enumerable.cs: More SelectionMany.
+
 2007-08-21  Marek Safar <marek.safar@gmail.com>
 
        * AOrderedEnumerable: New abstract base.
index 5d36ea1b159376ac74278e17751229acd73d2f1d..65809bf63617201c938facd0d03f825395897002 100644 (file)
@@ -2116,13 +2116,35 @@ namespace System.Linq
                 throw new ArgumentNullException();
 
             int counter = 0;
-            foreach (TSource element in source)
-            {
-                foreach (TResult item in selector(element, counter))
+            foreach (TSource element in source) {
+                foreach (TResult item in selector(element, counter++))
                     yield return item;
                 counter++;
             }
         }
+        
+       public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult> (this IEnumerable<TSource> source,
+               Func<TSource, IEnumerable <TCollection>> collectionSelector, Func <TSource, TCollection, TResult> selector)        
+       {
+               if (source == null || collectionSelector == null || selector == null)
+                       throw new ArgumentNullException ();
+               
+               foreach (TSource element in source)
+                       foreach (TCollection collection in collectionSelector (element))
+                               yield return selector (element, collection);
+       }
+
+        public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult> (this IEnumerable<TSource> source,
+               Func<TSource, int, IEnumerable <TCollection>> collectionSelector, Func <TSource, TCollection, TResult> selector)        
+       {
+               if (source == null || collectionSelector == null || selector == null)
+                       throw new ArgumentNullException ();
+               
+               int counter = 0;                
+               foreach (TSource element in source)
+                       foreach (TCollection collection in collectionSelector (element, counter++))
+                               yield return selector (element, collection);    
+       }
 
         #endregion