Author: marek
Date: 2007-08-22 08:18:30 -0400 (Wed, 22 Aug 2007)
New Revision: 84612

Modified:
   trunk/mcs/class/System.Core/System.Linq/ChangeLog
   trunk/mcs/class/System.Core/System.Linq/Enumerable.cs
Log:
2007-08-22  Marek Safar <[EMAIL PROTECTED]>

        * Enumerable.cs: More SelectionMany.
        


Modified: trunk/mcs/class/System.Core/System.Linq/ChangeLog
===================================================================
--- trunk/mcs/class/System.Core/System.Linq/ChangeLog   2007-08-22 12:04:57 UTC 
(rev 84611)
+++ trunk/mcs/class/System.Core/System.Linq/ChangeLog   2007-08-22 12:18:30 UTC 
(rev 84612)
@@ -1,3 +1,7 @@
+2007-08-22  Marek Safar <[EMAIL PROTECTED]>
+
+       * Enumerable.cs: More SelectionMany.
+
 2007-08-21  Marek Safar <[EMAIL PROTECTED]>
 
        * AOrderedEnumerable: New abstract base.

Modified: trunk/mcs/class/System.Core/System.Linq/Enumerable.cs
===================================================================
--- trunk/mcs/class/System.Core/System.Linq/Enumerable.cs       2007-08-22 
12:04:57 UTC (rev 84611)
+++ trunk/mcs/class/System.Core/System.Linq/Enumerable.cs       2007-08-22 
12:18:30 UTC (rev 84612)
@@ -2116,14 +2116,36 @@
                 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
 
         #region Single

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to