It depends on what type of application you want to build.
If you want to develop App Store distributable applications than you must use the official Apple SDK. Apple only supports development using Mac OS X 10.5 on Intel processors. Also, distribution requires acceptance into their $99/year developer program.
If you want to develop jailbreak applications, than you can use the toolchain.
The toolchain for firmware 1.x worked on Mac OS X, Linux or Windows (using Cygwin). The new toolchain also works on the iPhone directly (!), and you can download the packages from Cydia.
Saurik has some fairly intense instructions here on upgrading the toolchain to 2.x:
Upgrading the iPhone Toolchain - Jay Freeman (saurik)
Jonathon Zdziarski is distributing a Mac OS X binary of the new toolchain here:
Index of /iphone
You can distribute your jailbreak applications via Cydia using someone like MMi as a host.
Also, the language of the iPhone (and Mac OS X) is Objective-C or Objective-C++, which is not entirely similar to C# at all - while C# took some ideas from C++, it also (unfortunately, IMHO) took concepts from Delphi which put it somewhere between C++ and Objective-C on my object-oriented language spectrum:
Smalltalk - C++ - C# - Delphi - Objective-C - C