private void PerformRoll() { if (Number > MAX_DICE_COUNT) { throw new TooManyDicesException(Number); } RollResult = Add; Random random = new Random(); diceResults = new List <BigInteger>(); if (Faces == 1) { RollResult += Number; } else { byte[] bytes = Faces.ToByteArray(); for (int i = 0; i < Number; i++) { random.NextBytes(bytes); bytes[bytes.Length - 1] &= (byte)0x7F; BigInteger roll = new BigInteger(bytes) % Faces + 1; if (Number <= MAX_DICE_RESULT_COUNT) { DiceResults.Add(roll); } RollResult += roll; } } }