2012-10-21 13 views
5

मैं निम्नलिखित CreateArray स्थिर विधि के साथ एक सरणी बनाने हूँ:Refactor LINQ foreach वापस जाने के लिए IEnumerable <T>

public static int[] CreateArray(int size) 
{ 
    var ret = new int[size]; 
    ret[0] = 0; 
    ret[1] = 1; 

    Parallel.ForEach(Enumerable.Range(2, size - 2), i => 
    { 
     ret[i] = Func(i).Count(); 
    }); 

    return ret; 
} 

कहाँ समारोह की तरह दिखता है:

public static IEnumerable<int> Func(int i) 
{ 
    ... 
} 

उस में CreateArray विधि refactor करने के लिए संभव है कुछ ऐसा:

public static int[] CreateArray(int size) 
{ 
    var tableFromIndex2 = ... 
    return new[] { 0, 1 } 
     .Concat(tableFromIndex2) 
     .ToArray(); 
} 

उत्तर

1

मुझे लगता है कि पीएल आईएनक्यू यहां उपयोगी हो सकता है:

var tableFromIndex = ParallelEnumerable.Range(2, size - 2) 
     .AsOrdered() 
     .Select(i => Func(i).Count()); 

return new[] { 0, 1 } 
     .Concat(tableFromIndex) 
     .ToArray(); 
+0

अरे svick, मैंने सोचा कि यह सही था लेकिन असल में मुझे परिणाम 'i' द्वारा आदेश नहीं मिला। मेरा मतलब है, मैं समानांतर में 'Func (i) .Count() 'चलाने के लिए ठीक हूं, लेकिन परिणाम' i' स्थिति में रखा जाना चाहिए ... –

+0

आप सही हैं, मैं 'AsOrdered()' । अब तय – svick

+0

धन्यवाद svick, मुझे नहीं पता 'AsOrdered() 'मौजूद है –

संबंधित मुद्दे