All you need to do is this check if the number already exists in the list and if so get another one:
static void Main(string[] args)
{
    ArrayList r = new ArrayList();
    Random ran = new Random();      
    int num = 0;
    for (int i = 0; i < 50; i++)
    {
        do { num = ran.Next(1, 51); } while (r.Contains(num));
        r.Add(num);
    }
    for (int i = 0; i < 50; i++)
       Console.WriteLine(r[i]);
    Console.ReadKey();
}
Edit: This will greatly increase the effeciency, preventing long pauses waiting for a non-collision number:
    static void Main(string[] args)
    {
        List<int> numbers = new List<int>();
        Random ran = new Random();
        int number = 0;
        int min = 1;
        int max = 51;
        for (int i = 0; i < 50; i++)
        {
            do
            {
                number = ran.Next(min, max);
            }
            while (numbers.Contains(number));
            numbers.Add(number);
            if (number == min) min++;
            if (number == max - 1) max--;
        }
        for (int i = 0; i < 50; i++)
            Console.WriteLine(numbers[i]);
        Console.ReadKey();
    }