数组和集合 / 迭代器

using System;
using System.Collections.Generic;
using System.Linq;

IEnumerable<T> Reverse<T>(ICollection<T> data)
{
    var current = data.Count;
    while (current >= 1)
    {
        current -= 1;
        yield return data.ElementAt(current);
    }
}

foreach (var i in Reverse("string".ToList())) {
    Console.WriteLine(i);
}
//printed g, n, i, r, t, s

foreach (var i in Reverse(new[] {123})) {
    Console.WriteLine(i);
}
//printed 3, 2, 1