I never said it matters. It doesn't. It's just interesting to find out how short you can make a bit of code. In terms of efficiency, it's usually horrible (though the short-circuiting there is nice).
Before getting into your solution, I'm Gadget -- nice to meet you!
Alright, I see a few problems with your solution...
1) In order for you to print a numeral, the entire conditional must be true which only occurs when a number is both a multiple of 3 and 5 (ie a multiple of 15). If the current number is a multiple of 5, but not 3, you won't ever print "Buzz" due to short-circuiting of the and statement (note: I believe that C# does short-circuiting... I could be wrong).
2) If a number is a multiple of 3, you will print "Fizz", but you will follow it with a 3 or 6 or ...
3) You're going to have newline errors. For example, you can either print a newline after "fizz" which works for multiples of 3 (minus issue #1 above), but it will print "fizz\nbuzz\n" for a multiple of 15. Some languages will allow you to use a conditional inside of a print statement, but I doubt that C# supports this functional style of programming (see example below).
Just some thoughts...
(loop for i from 1 to 20 do
(format t "~a~%"
(cond ((and (= (mod i 3) 0) (= (mod i 5) 0)) "FizzBuzz")
((= (mod i 3) 0) "Fizz")
((= (mod i 5) 0) "Buzz")