Here is my personal opinion:
I have been in the .NET world for a while. When the iPhone launched the ability to create its own applications, it attracted my attention. I really tried to learn Objective-C. I read 2 books and started trying and trying like a month, and then I quit programming on the iPhone because you had to do many things that on .NET required a single line of code.
When Miguel de Icaza launched MonoTouch, I tried, and I realized that most of my previously made code was fully functional. I have always tried to separate the user interface code from the business code, and this is actually the .NET point on the iPhone. To bring most of your already done business logic to your device.
Also on Objective-C you will not find anything similar to LINQ or the var keyword. The consumption of web services on MonoTouch is just a few clicks away.
If you want to target the Android platform, there is also MonoDroid (monodroid.net). Also, if you want to target Mac OSX, there is MonoMac. So you can share the lib classes between these 3 platforms without much hassle. Not to mention, it will work on Windows and vice versa (when possible).
The only thing you will need to worry about is the interface, but most of your business logic should work.
The following is a complete list of .NET collections supported by MonoTouch: http://monotouch.net/Documentation/Assemblies . In addition, MonoTouch provides C # / CIL binding to all CocoaTouch APIs.
Also, the MonoTouch team support is awesome. You can just go to IRC, ask a question, and they will answer it right away. They also have a mailing list. :)
I really like MonoTouch. I know that no language is perfect for all tasks, and Objective-C is no exception.