I urge my friends against adopting C# as their preferred language, to adopt Java instead. The reasons are quite simple.
1) Microsoft has patents over specific parts of C# and the .Net runtime. Some of these patents I hear apply to Java as well (and from what I hear existed before C#). Companies illegally patent commonly known software techniques to use these patents as threats (or in Sun's and Redhat's case as counter threats) in litigation cases to maintain their monopolies-to prevent companies with different monopolies from intruding on their turf. Each patent usually must be individually struck down since the courts traditionally give deference to the executive government.
The important element is that if you write C# software and you market it in a way that Microsoft does not like. They could take you infront a federal judge and say that your violating patents WE own on a language WE developed. You would be bankrupted and your software copyrights may be reassigned to Microsoft as compensation determined by the court. (Remember i'm not a lawyer but copyrights have been treated like property by US courts.)
Mono is no better.
Now the difference with Java. Java is under the GPL v2 which (I hope) implies a license to use their patents as a license to use their copyrights but not their patents with the software would make such a license worthless. (As well as their patent promise that they will not sue you if you USE their implementation of the Java software).
Now what if Microsoft sues you for infringing on their illegal patents when you use Java? Well Oracle will not like that as MS may use that as caselaw to sue them and kill a critical element of their business. (Java applications connecting to Oracle databases.)
When your a small business it is almost impossible to fight megacorporations in the long run-you must use deference to keep them from snuffing you out. In this case have Oracle fight Microsoft on your behalf. The deference from a counter threat from Oracle-a long, costly legal battle that probably end up with their patents be invalided by the courts-will keep Microsoft at bay. This similar to the strategy by Thailand rulers of using Britain and France's rivalry to keep the country from being colonised.
This should be enough to keep any developer from using C# but in case that the above changes here are two more reasons.
2) .Net is slow.
Really slow... compared to Java.
See for yourself. (it does use less memory)
Then their the real world case-The London Stock Exchange which Microsoft advertised so heavily a few years ago. C# was 20 times slower for the high frequency exchanged compared to Java platforms. When your in high frequency trading milliseconds matter-LSE was losing millions of dollars due to an inferior platform.
LSE bought a little Sri Lanka company that made trading software for GNU/Linux. All of Wall Street runs GNU/Linux because it is the only platform that can handle the intense workload imposed by high frequency trading. Most high end Internet organisations run on GNU/Linux with Java as it is the only software stack that can handle the load. .Net is inferior-it will cripple your career.
3) It may not be around
.NET keeps changing. I gave up following it's developments a while ago (except for their C/C++ interface which GNU-gcj seems to be a have an easier time with). C# was developed because Microsoft was sued by Sun Microsystems for adding Windows only extensions, fracturing the Java platform. Which Microsoft removed in Windows XP leaving all those Java programs with MS extensions in the cold. (Sun won the case, gave them a choice, keep Java pure and up to date or remove it.) When Gates left alot of Microsoft's vision went with him: SPOT watches, touch tablets (yeah, he pushed them for years), etc. Then their is the technology which exists purely to eat another person's lunch: Zune (Apple iPod), MSN (AOL/Google Search), Microsoft Money (Intuit TurboTax). These products had no vision, only to keep other companies at bay and they were inferior attempt at best that had huge advertising campaigns. .NET exists to eat Oracle's lunch, make no doubt about that, and like the past they are inferior attempt wrapped in marketing and like the past I feel they will not exist with in the next few years with Ballmer creating then cutting products like these.