It's dangerous to code alone! Take this.

Excepti's Game

The following is one possible solution to this challenge.

using System;
using System.Collections.Generic;

try
{
    int targetNumber = new Random().Next(10);
    List<int> previousGuesses = new List<int>();

    while (true)
    {
        int number;
        bool previouslyGuessed;
        do
        {
            Console.Write("Pick a number between 0 and 9 (inclusive): ");
            number = Convert.ToInt32(Console.ReadLine());
            previouslyGuessed = previousGuesses.Contains(number);
            if (previouslyGuessed) Console.WriteLine("That number has been guessed before.");
        } while (previouslyGuessed);

        if (number == targetNumber) throw new Exception();

        previousGuesses.Add(number);
    }
}
catch(Exception)
{
    Console.WriteLine("That was the bad number! You lose!");
}

// Answer this question: Did you make a custom exception type or use an existing one, and why did you choose what you did?
//
//    I just used `Exception` because it was easier. For a program this size, it didn't seem justified to build a whole
//    new exception class. (See also my answer to the next question.)
//
// Answer this question: This program could also be written without exceptions, but the requirements demanded an exception
// for learning purposes. If you didn't have that requirement, would you have used an exception, and why or why not?
//
//    In this case, I wouldn't have used an exception. The code that detected the "problem" knows what to do about it.
//    So rather than throwing an exception, I would normally have just done something like use `Console.WriteLine`
//    to display the "You lose!" message, and then `break;` out of the loop and end the program.