Escrevendo FizzBuzz

Lendo o horror da codificação, acabei de encontrar o FizzBuzz outra vez.

O post original está aqui:Coding Horror: Por que não pode programadores .. Programa?

Para quem não sabe: FizzBuzz é um jogo infantil bastante popular. Contando de 1 a 100, e toda vez que um número é divisível por 3 chamando "Fizz", toda vez que um número é divisível por 5 chamando "Buzz" e toda vez que um número é divisível por 3 e 5, chamando "FizzBuzz ao invés do número

Mas desta vez, comecei a codificá-lo. Foi um trabalho de um minuto, mas há várias coisas que eu não gosto.

Aqui está meu código

public void DoFizzBuzz()
{
    var combinations = new Tuple<int, string>[] 
    { 
        new Tuple<int, string> (3, "Fizz"), 
        new Tuple<int, string> (5, "Buzz"), 
    };

    for (int i = 1; i <= 100; ++i)
    {
        bool found = false;

        foreach (var comb in combinations)
        {
            if (i % comb.Item1 == 0)
            {
                found = true;
                Console.Write(comb.Item2);
            }
        }

        if (!found)
        {
            Console.Write(i);
        }

        Console.Write(Environment.NewLine);
    }
}

Então minhas perguntas são:

Como se livrar do bool encontrado?Existe uma maneira melhor de testar do que o foreach?

questionAnswers(30)

yourAnswerToTheQuestion