[System.Core] Remove generic indirection for ToList
authorJérémie Laval <jeremie.laval@gmail.com>
Tue, 4 Sep 2012 11:12:00 +0000 (12:12 +0100)
committerJérémie Laval <jeremie.laval@gmail.com>
Tue, 4 Sep 2012 11:15:33 +0000 (12:15 +0100)
mcs/class/System.Core/System.Linq/ParallelEnumerable.cs

index d85d30c24c664ec234cb3530357cc11afb94a779..6236f485baaec0d86316a0b9eac93a486767202c 100644 (file)
@@ -1912,13 +1912,39 @@ namespace System.Linq
                        if (source.Node.IsOrdered ())
                                return ToListOrdered (source);
 
-                       List<TSource> temp = source.Aggregate (() => new List<TSource>(50),
-                                                              (list, e) => { list.Add (e); return list; },
-                                                              (list, list2) => { list.AddRange (list2); return list; },
-                                                              (list) => list);
+                       var helper = new ListAggregateHelper<TSource> ();
+                       List<TSource> temp = source.Aggregate (helper.Seed,
+                                                              helper.Intermediate,
+                                                              helper.Reducer,
+                                                              helper.Final);
                        return temp;
                }
 
+               class ListAggregateHelper<TSource>
+               {
+                       public List<TSource> Seed ()
+                       {
+                               return new List<TSource> (50);
+                       }
+
+                       public List<TSource> Intermediate (List<TSource> list, TSource e)
+                       {
+                               list.Add (e);
+                               return list;
+                       }
+
+                       public List<TSource> Reducer (List<TSource> list, List<TSource> list2)
+                       {
+                               list.AddRange (list2);
+                               return list;
+                       }
+
+                       public List<TSource> Final (List<TSource> list)
+                       {
+                               return list;
+                       }
+               }
+
                internal static List<TSource> ToListOrdered<TSource> (this ParallelQuery<TSource> source)
                {
                        List<TSource> result = new List<TSource> ();