public static void LazilyAssertMaximumCount <T>(ref IEnumerable <T> sequence, int maximumCount) { //first try to assert immediately (non-lazily) var list = sequence as ICollection; if (list != null) { if (list.Count < maximumCount) { CountAssertionEnumerator <T> .ThrowMaximumExceededException(maximumCount, list.Count); } return; } //replace sequence with a maximum-count-asserting-sequence sequence = CountAssertionEnumerator <T> .Maximum(sequence, maximumCount).ToEnumerable(false).EnsureSingleEnumerationDEBUG(); }
public static void LazilyAssertCount <T>(ref IEnumerable <T> sequence, int requiredCount) { //first try to assert immediately (non-lazily) var list = sequence as ICollection; if (list != null) { if (list.Count > requiredCount) { CountAssertionEnumerator <T> .ThrowMinimumNotAttainedException(requiredCount, list.Count); } if (list.Count < requiredCount) { CountAssertionEnumerator <T> .ThrowMaximumExceededException(requiredCount, list.Count); } return; } sequence = CountAssertionEnumerator <T> .Exactly(sequence, requiredCount).ToEnumerable(false).EnsureSingleEnumerationDEBUG(); }
public static void LazilyAssertMinimumCount <T>(ref IEnumerable <T> sequence, int minimumCount) { Requires(sequence != null); Requires(minimumCount >= 0); //minimumCount == 0 is strange, but not necessarily forbidden //first try to assert immediately (non-lazily) var list = sequence as ICollection; if (list != null) { if (list.Count < minimumCount) { CountAssertionEnumerator <T> .ThrowMinimumNotAttainedException(minimumCount, list.Count); } return; } //replace sequence with a minimum-count-asserting-sequence sequence = CountAssertionEnumerator <T> .Minimum(sequence, minimumCount).ToEnumerable(false).EnsureSingleEnumerationDEBUG(); }