最近以下の短い拡張メソッドを作りました。
この拡張メソッドを使用すると、Listや配列の全てのIndexを遅延評価で列挙します。
public static IEnumerable Indexes(this IList items) {
if (items == null) yield break;
for (int i = 0; i < items.Count; i++) {
yield return i;
}
}
どこで使用するのかというと、
たとえば、コレクションの全ての要素に対して処理を行いたい場合、foreachを
使用しますが、処理内でIndexを使用したい場合、foreachではIndexが分かりません。
(たしかPHPなんかではIndexと要素の両方が使用できたはず)
foreach (var item in items) {
//Indexが分からない
}
もちろんforを使用すれば良いのですが、パッと見ただけで全ての要素に対して処理している事が分かった方が可読性が高くて良い。なので以下のように使います。
foreach (int i in items.Indexes()) {
//要素ごとの処理
}