public static T first <T>(IEnumerable <T> ts) { Bomb.ifNull(ts, () => "null ts!"); var e = ts.GetEnumerator(); Bomb.unless(e.MoveNext(), () => "can't get first of empty enumerable"); return(e.Current); }
public static T nth <T>(IEnumerable <T> ts, int n) { Bomb.ifNull(ts, () => "null ts!"); var e = ts.GetEnumerator(); zeroTo(n, i => Bomb.unless(e.MoveNext(), () => "can't get " + (i + 1) + "th of empty enumerable")); return(e.Current); }
public static IEnumerable <T> rest <T>(IEnumerable <T> ts) { Bomb.ifNull(ts, () => "null ts!"); var e = ts.GetEnumerator(); Bomb.unless(e.MoveNext(), () => "can't get rest of empty enumerable"); while (e.MoveNext()) { yield return(e.Current); } }
static void requireNonEmpty <T>(IList <T> ts) { Bomb.when(Bomb.ifNull(ts, () => "null ts!").Count < 1, () => "empty list passed to requireNonEmpty"); }