ソースコード
using System;
using System.Collections.Generic;
public static class ListExt
{
public struct ForEachData<T>
{
private readonly int m_index ;
private readonly T m_value ;
private readonly bool m_isLast ;
public int Index { get { return m_index ; } }
public T Value { get { return m_value ; } }
public bool IsLast { get { return m_isLast ; } }
public ForEachData
(
int index ,
T value ,
bool isLast
)
{
m_index = index ;
m_value = value ;
m_isLast = isLast ;
}
}
public static void ForEach<T>
(
this IList<T> self ,
Action<ForEachData<T>> callback
)
{
var count = self.Count;
for ( int i = 0; i < count; i++ )
{
var data = new ForEachData<T>
(
index : i,
value : self[ i ],
isLast : i == count - 1
);
callback( data );
}
}
}
使い方
var list = new [] { 1, 2, 3 };
list.ForEach( data =>
{
Console.WriteLine( "{0}: {1}", data.Value, data.IsLast );
} );
結果
1: False
2: False
3: True