Interactive Extensions(Ix)を自分で実装する、11回目はIsEmptyです。
その名から予想できる通り、シーケンスが空かどうかを判断するためのものです。
static void IsEmptyTest() { IEnumerable<int> noSequence = Enumerable.Range(1, 0); // count = 0 var noSequenceResult = noSequence.IsEmpty(); Console.WriteLine(noSequenceResult); IEnumerable<int> oneSequence = Enumerable.Range(1, 1); // count = 1 var oneSequnenceResult = oneSequence.IsEmpty(); Console.WriteLine(oneSequnenceResult); }
列挙アイテムが1つもなければTrue, 1つでもあればFalseを返します。実行例は省略しますが、nullに対してはちゃんとArgumentNullExceptionがスローされました。
では実装です。(Let’s Implement It!)
IsEmpty…シーケンスに列挙アイテムが1つでもあるかを確認する。
namespace EmulateInteractiveExtensions { public static class EmulateIxExtensions { public static bool IsEmpty<TSource> (this IEnumerable<TSource> source) { if (source == null) { throw new ArgumentNullException(); } return !source.GetEnumerator().MoveNext(); } } }
実装方法はいろいろあるかと思いますが、1文で済むのでIEnumeratorを使ってアイテムがあるかないかを判断しています。
広告