private Card GetRandomCard() { decimal randomNumber = (decimal)random.GetNewRandom(); Card[] cards = this.cardsRepository.GetAll; int count = cards.Length; decimal oldRange = 0; decimal newRange = 0; for (int i = 0; i < count; i++) { newRange = newRange + cards[i].Probability; if (oldRange <= randomNumber && randomNumber <= newRange) { return(cards[i]); } oldRange = newRange; } throw new ArgumentOutOfRangeException(nameof(this.GetRandomCard)); }