private static RndResult <IEnumerable <A> > NoRepeat <A>(int count, int tries, IRnd <A> rnd) where A : IEquatable <A> { A last = default(A); A[] arr = new A[count]; for (int i = 0; i < count; i++) { var res = i == 0 ? rnd.Next(tries) : rnd.Where(a => !a.Equals(last)).Next(tries); if (!res.WasSuccessful) { return(new RndResult <IEnumerable <A> >()); } last = res.Result; arr[i] = last; } return(new RndResult <IEnumerable <A> >(arr)); }