有没有一个很好的方法来枚举只有C#中的集合的一个子集?也就是说,我收集了大量的对象(例如1000),但是我只想枚举250到340的元素.有没有一个很好的方法来获取枚举器的集合的一个子集,没有使用另一个集合?
编辑:应该提到这是使用.NET Framework 2.0.
解决方法
尝试以下
var col = GetTheCollection(); var subset = col.Skip(250).Take(90);
或更一般地
public static IEnumerable<T> GetRange(this IEnumerable<T> source,int start,int end) { // Error checking removed return source.Skip(start).Take(end - start); }
EDIT 2.0解决方案
public static IEnumerable<T> GetRange<T>(IEnumerable<T> source,int end ) { using ( var e = source.GetEnumerator() ){ var i = 0; while ( i < start && e.MoveNext() ) { i++; } while ( i < end && e.MoveNext() ) { yield return e.Current; i++; } } } IEnumerable<Foo> col = GetTheCollection(); IEnumerable<Foo> range = GetRange(col,250,340);