C# 2.0 で IEnumerable (および ICollection) を実装するカスタム コレクション クラスでアイテムをチャンクアップしようとしています。たとえば、一度に 1000 個のアイテムしか必要とせず、コレクションに 3005 個のアイテムがあるとします。以下に示す実用的な解決策がありますが、これは非常に原始的であるため、これを行うためのより良い方法が必要であると考えています。
これが私が持っているものです(たとえば、C#3.0のEnumerableとvarを使用しています。これらの参照を心の中でカスタムクラスに置き換えてください):
var items = Enumerable.Range(0, 3005).ToList();
int count = items.Count();
int currentCount = 0, limit = 0, iteration = 1;
List<int> temp = new List<int>();
while (currentCount < count)
{
limit = count - currentCount;
if (limit > 1000)
{
limit = 1000 * iteration;
}
else
{
limit += 1000 * (iteration - 1);
}
for (int i = currentCount; i < limit; i++)
{
temp.Add(items[i]);
}
//do something with temp
currentCount += temp.Count;
iteration++;
temp.Clear();
}
C# 2.0 でこれを行うよりエレガントな方法を提案できる人はいますか? このプロジェクトが過去 5 年間のものであるかどうかは、Linq を使用できることを知っています (こことここで示されているように)。私の方法が機能することはわかっていますが、私の名前がそのような醜い (私の意見では) コードに関連付けられることは望ましくありません。
ありがとう。