列挙クラス定義
namespace EnumeratorSample
{
<summary>
</summary>
class RangeEnumerable2
{
private int from;
private int count;
private int step;
<summary>
</summary>
<param name="from"></param>
<param name="count"></param>
<param name="step"></param>
public RangeEnumerable2(int from, int count, int step)
{
this.from = from;
this.count = count;
this.step = step;
}
<summary>
</summary>
<returns></returns>
public IEnumerable<int> GetEnumerable()
{
for (int i = from; i < from + count; i+=step)
{
yield return i;
}
}
}
<summary>
</summary>
class RangeEnumerable : IEnumerable<int>
{
private int from;
private int count;
<summary>
</summary>
<param name="from"></param>
<param name="count"></param>
public RangeEnumerable(int from, int count)
{
this.from = from;
this.count = count;
}
#region IEnumerable<int> メンバ
public IEnumerator<int> GetEnumerator()
{
for (int i = from; i < from + count; i++)
{
yield return i;
}
}
#endregion
#region IEnumerable メンバ
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return new EnumeratorSample.NonGenelic.RangeEnumrator(from, count);
}
#endregion
}
}
namespace EnumeratorSample.NonGenelic
{
class RangeEnumrator : System.Collections.IEnumerator
{
private int[] array;
private int idx;
<summary>
</summary>
<param name="from"></param>
<param name="count"></param>
public RangeEnumrator(int from, int count)
{
array = new int[count];
for (int i = 0; i < count; i++)
array[i] = from + i;
idx = -1;
}
#region IEnumerator メンバ
public object Current
{
get
{
try
{
return array[idx];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
public bool MoveNext()
{
idx++;
return idx < array.Length;
}
public void Reset()
{
idx = -1;
}
#endregion
}
}
上記列挙クラスの使用
<summary>
</summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
foreach (var val in new RangeEnumerable(1, 10))
{
Console.WriteLine("Value:{0}", val);
}
System.Collections.IEnumerable enumerable = (System.Collections.IEnumerable)new RangeEnumerable(11, 10);
foreach (int val in enumerable)
{
Console.WriteLine("Value:{0}", val);
}
foreach (var val in new RangeEnumerable2(20, 10, 3).GetEnumerable())
{
Console.WriteLine("Value:{0}", val);
}
}
}