My guess is that they only include the types of the parameters to disambiguate between overloads. Since you can't overload based on the return type they don't include it.
C# is fantastic compared to Java and seems to avoid a lot of the crap. But F# trumps C# in just about every aspect, apart from having lots of funds for tooling.
C# has "computation expressions", except they are hard-coded into the compiler. It has duck typing, but it's hard-coded into the compiler. So instead of understanding a general concept, you learn specific instances. That's certainly less elegant, and I'd guess just as complicated - but I'd say that's more magic on C#'s side since in F# it's just simple concepts repeated.
I don't know if type providers are more complicated than partial classes, and they probably should have been some generic macro system instead of just type generators.
I don't have a good definition for complicated, but I'd be surprised if C# is actually less complicated. (Something number of core concepts and interactions.) Certainly if we take expressiveness/complication F# come out far ahead.
C# is fantastic compared to Java and seems to avoid a lot of the crap. But F# trumps C# in just about every aspect, apart from having lots of funds for tooling.