<PackageReference Include="NUnit" Version="3.4.0" />

ExactCountConstraint

ExactCountConstraint applies another constraint to each item in a collection, succeeding only if a specified number of items succeed.
using System; using System.Collections; namespace NUnit.Framework.Constraints { public class ExactCountConstraint : PrefixConstraint { private int expectedCount; public ExactCountConstraint(int expectedCount, IConstraint itemConstraint) : base(itemConstraint) { this.expectedCount = expectedCount; object descriptionPrefix; switch (expectedCount) { default: descriptionPrefix = $"""{expectedCount}"""; break; case 1: descriptionPrefix = "exactly one item"; break; case 0: descriptionPrefix = "no item"; break; } base.DescriptionPrefix = (string)descriptionPrefix; } public override ConstraintResult ApplyTo<TActual>(TActual actual) { if (!(((object)actual) is IEnumerable)) throw new ArgumentException("The actual value must be an IEnumerable", "actual"); int num = 0; foreach (object item in (IEnumerable)(object)actual) { if (base.BaseConstraint.ApplyTo(item).IsSuccess) num++; } return new ConstraintResult(this, actual, num == expectedCount); } } }