using System.Collections;
using System.Collections.Generic;
public static void Main()
var owners = new[] { "Karen", "Bob", "John", "Anne" };
var pets = new[] { "Dog", "Cat", "Bird", "Fish" };
foreach (var index in 1..3)
Console.WriteLine($" {owners[index],-8}{pets[index]}");
for (int index = 1; index < 3; index++)
Console.WriteLine($" {owners[index],-8}{pets[index]}");
foreach (var index in range)
Console.WriteLine($" {owners[index],-8}{pets[index]}");
public static class RangeExtensions
public static RangeEnumerator GetEnumerator(this Range range)
if (range.Start.IsFromEnd || range.End.IsFromEnd)
throw new ArgumentException(nameof(range));
return new RangeEnumerator(range.Start.Value, range.End.Value);
public struct RangeEnumerator : IEnumerator<int>
private readonly int _end;
public RangeEnumerator(int start, int end)
public int Current => _current;
object IEnumerator.Current => Current;
public bool MoveNext() => ++_current < _end;
public void Dispose() { }
throw new NotImplementedException();