2012-07-03 33 views

回答

0

牙多少咬牙切齒後,揪頭髮和敲我的頭撞在牆上,我決定做它創造我自己的迭代器的簡單方法。

public static class LinqExtensions { 
    public static IEnumerable<T> InRange<T>(this IEnumerable<T> list, T first, T last) { 
     int i = 0; 

     while (list.Count() > i && ! list.ElementAt(i).Equals(first)) 
      ++i; 

     while (list.Count() > i && ! list.ElementAt(i).Equals(last)) 
      yield return list.ElementAt(i); 

     if (list.Count() > i && list.ElementAt(i).Equals(last)) 
      yield return list.ElementAt(i); 
    } 
} 

現在下面的工作完美: -

foreach (var x in animals.InRange("bee", "monkey")) { 
    .... 
} 
3

使用SkipWhileTakeWhile擴展方法

var myAnimals = animals.SkipWhile(a => a != "bee").TakeWhile(a => a != "monkey").ToList(); 
+1

注意,這將排除'monkey'。 –

+0

是的,那是對的。任何想法如何改變這種行爲? – MarcinJuraszek

+0

@MarcinJuraszek如果它們按字母順序排序... * TakeWhile(a => a <=「monkey」)* – McGarnagle

相關問題