Проблема в том, что CGPoint на самом деле является просто структурой C, но не объектом:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
Если вы используете iPhone, вы можете использовать дополнения NSValue UIKit для преобразования CGPoint в объект NSValue. .
См. Этот предыдущий ответ с примерами: Как можно легко добавить объекты CGPoint в NSArray?
Попробуйте следующее
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);
}
РЕДАКТИРОВАТЬ 2.0 Решение
public static IEnumerable<T> GetRange<T>(IEnumerable<T> source, int start, 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);
Я предпочитаю, чтобы это было просто (если вам не нужен счетчик):
for (int i = 249; i < Math.Min(340, list.Count); i++)
{
// do something with list[i]
}
Адаптация исходного кода Джареда для .Net 2.0:
IEnumerable<T> GetRange(IEnumerable<T> source, int start, int end)
{
int i = 0;
foreach (T item in source)
{
i++;
if (i>end) yield break;
if (i>start) yield return item;
}
}
И его использование:
foreach (T item in GetRange(MyCollection, 250, 340))
{
// do something
}
Возможно, вы сможете что-то сделать с Linq . Я бы сделал это так, чтобы поместить объекты в массив, а затем я мог бы выбрать, какие элементы я хочу обработать, на основе идентификатора массива.
Если вы обнаружите, что вам нужно сделать изрядное количество нарезка и нарезка списков и коллекций,