I've just read an article on Hans-Eric Grönlund's blog, which discusses how close Java and C# are as languages. He concludes that "C#.NET is the best platform for Windows based systems since it was in fact designed for it. Java on the other hand is the only option for systems that are targeting other operating systems."
I would agree that Java is probably the only realistic option for systems targeting non-Windows environments. However, I would be reluctant to assert that C# was the best language for Windows development, although I would certainly agree that .NET is now the best platform for it.
The issue is that on this front we are discussing three levels: the language, the platform and the operating system. The only language supported by the "Java" platform is Java, but it targets multiple operating systems; whereas .NET supports multiple languages and mainly targets the Windows operating system (although as Hans-Eric mentions the Mono project widens this base a little).
While I would certainly agree that C# is the lead language for the .NET platform, I would suggest that the differences between the majority of the .NET languages (such as VB.NET, etc) are now almost non-existent, which leads to an interesting conclusion.
It seems to me that an undeniable trend is that modern programming languages are converging in terms of their functionality and that sooner or later the choice between one language and another will largely be down to personal preference over the syntax used by a particular language.
Obviously, this trend is driven by the use of virtual machines that run compiled bytecode (ie: virtual machine code) rather than native machine code.