In some ways C# is useless, its not a cross platform language, it has run time environment[sic] but no virtual machine, so its in the same category as VB, the only upside is that C# is more like C++ then VB, so you can use C# to proto type stuff.
As you can't do so many things wrong whit C# it is relatively easy to learn language.
Down side to C# is that if you can't type #ifdef and stuff like that.
Another downside C# depends on Microsoft class libraries.
Java has virtual machine, bit like running a emulator, should work every where provided all the Java classes are supported by OS, but they are not on AmigaOS so it more or less useless.
Besides Java is slow because its not native (not the language and not the VM).
Perhaps you've never heard of Mono? Mono runs .NET assemblies on Linux and Mac. Mono is under Shared Source license from Microsoft so as long as you don't care that .NET is patent encumbered, you can run C# on anything that runs Mono. Just don't expect all the libraries that use unmanaged code from .NET to work on anything other than Windows.
Also, the latest versions of Android gut the Dalvik JVM and make it compile statically into native code at download. I think the jAmiga JVM used on AOS 4.x has a similar way to statically compile .class files into native code as well.
Lastly, GCJ is a static Java compiler for GCC. It depends on GNU Classpath being compiled into a shared object called LibGCJ.