Mal eine kleine Anmerkung zum Code: Du arbeitest oft mit Count() in deinen Erweiterungen. Die Benutzung von Iteratoren würde vieles etwas effektiver gestalten.
Die CountsMin-, CountsMax- und CountsExactly-Methoden würden bei unendlichen Auflistungen so beim Durchzählen in einer Endlosschleife hängen bleiben - was sie nicht müssten, da du ja die Grenze, bis zu der gezählt werden muss, um das Ergebnis (true/false) zu bestimmten, kennst. Zumal du in bestimmten Fällen ja schon vorher abbrechen kannst, ohne alle Elemente geholt/durchgezählt zu haben.
Ebenso deine Random-Erweiterungsmethode: Das würde für Auflistungen, die keine Collections sind, bedeuten, dass entweder alle Elemente gepuffert werden müssen oder die Auflistung zweimal durchlaufen werden muss. Unter
C# in Depth: Downloads (Chapter12\RandomExtension) findest du eine Implementierung, die bei Collections mit Count() arbeitet und bei Nicht-Collections eine Möglichkeit verwendet, nur einmal über die Auflistung zu iterieren.