Recs.
Updated
SpecsUpdate
Pros
Pro Rich library support and developer community
C# has a very broad ecosystem supporting it, including clones of most familiar paradigms from Java, such as package management, an xml-based build system similar to Ant, clone of unit testing, aspect-oriented programming and MVC frameworks. Millions of C# developers are currently working around the world, are helpful and are members of most QA communities.
Pro Sophisticated tooling under vigorous development
Visual Studio and corresponding tools are constantly being updated. Code analysis and development tools available from various vendors, including Microsoft, are readily available. In some segments, several tools compete with each other to fulfill the same task. The result is relatively cheap tooling and lots of open source.
Pro Supported on many platforms
C# can be used for Windows apps, Linux apps, OS X apps, Windows 8 "modern" apps, websites, games, iPhone apps, Android apps, Windows Phone apps, and more.
If you want to create a cross-platform application, you can share most of the code and write one GUI for each platform.
Pro Very high demand in the industry
C#'s been around for just the right amount of time, is regularly updated with useful additions, is versatile, easy to write & read, & has excellent tooling support. This means it is a top choice for many organisations & will remain so for the foreseeable future.
Pro .NET truly universal
With .NET core it is a truly universal programming language which support desktop apps (Windows), Mobile apps (Xamarin), Web Apps (ASP.Core MVC). Also is perfectly fit to serverless programming for micro services. Soon it will be also support Web assembly (Blazor).
Pro Can mix high and low level programming
You can code at the high level without worrying about pointers and memory management, but if you so choose you can switch to lower level programming with direct memory management and pointer manipulation (though you need to compile to specifically allow this).
Pro Best language for Windows programs
C# is clearly the best choice for Windows programs. The .NET framework contains everything you need to build great-looking apps, without having to learn the confusing Win32 API or download a ton of external libraries. C# can also be used to build Windows 8's "modern" apps.
Pro Supports some functional features
C# is primarily object-oriented, but it also supports some features typically found in functional languages such as lambdas, delegates and anonymous classes. Methods can be treated like any other object, and the Linq query system operates on monads with lazy evaluation (though it hides this with a lot of syntactic sugar).
You don't need to use these features to code in C#, though, so you can start with OOP and then learn about them.
Pro .NET is a great toolbox
C# runs on top of the .NET framework, which provides many libraries containing classes used for common tasks such as connecting to the Internet, displaying a window or editing files. Unlike many other languages, you don't have to pick between a handful of libraries for every small task you want to do.
Pro Awesome IDE for Windows
On Windows, Visual Studio is the recommended C# IDE. It provides a very flexible GUI that you can rearrange the way you want and many useful features such as refactorings (rename a variable, extract some code into a method, ...) and code formatting (you can pick exactly how you want the code to be formatted).
Visual Studio also highlights your errors when you compile, making your debug sessions more efficient since you don't have to run the code to see the mistakes. There's also a powerful debugger that allows you to execute the code step-by-step and even change what part of the code will be executed next. In addition to giving you all the line-by-line information you'll need in a hassle-free manner, Visual Studio has stuff you can click on in the errors window that will take you to the documentation for that error, saving you several minutes of web searching.
In addition to all of this, Visual Studio has an intuitive, intelligent, and helpful graphical user interface designer that generates code for you (the best of WYSIWYG, in my opinion), which is helpful for new programmers. Being able to create a fantastic-looking UI with one's mouse and then optionally tweak with code helps make programming fun for beginner developers.
Visual Studio also has the best code completion --Intellisense is every bit as intelligent as the name says it is. It, as well as VS's parameter hinting, is context-, type-, user-, and position-sensitive, and displays relevant completions in a perfectly convenient yet understandable order. This feature allows a new programmer to answer the questions "What does this do?" and "How do I use it?" right then and there rather than having to switch to a browser to read through extensive documentation. This allows the programmer to satisfy their curiosity before it is snuffed out by several minutes of struggling through exhaustive documentation.
And for the more adventurous and text-ready developer, Microsoft does the best job of ensuring that everything, from interfaces and wildcard types down to Console.WriteLine("") and the + operator, is well-documented and easy to understand, with relevant and well-explained usage examples that manage to be bite-size yet complete, simple yet truly helpful. The reference site is easy to navigate, well-organized, clean and uncluttered, up-to-date, and fresh and enjoyable to look at, and every page is well-written with consideration for readers who are not C# experts yet want to read about changing the console background color.
The best part? It's free! Visual C# Express contains all of the features described above, at zero cost. If you are a student, you can probably get Visual Studio Professional from your university, which also includes tools for unit testing and supports plugins.
Pro Great introduction to object-oriented programming
Object-oriented programming is the most widely-used paradigm. C# offers support for common OOP features such as classes, methods and fields, plus some features not found in competing languages like properties, events and static classes.
C# code is much more readable thanks to the syntactic sugar it offers. You can truly concentrate on your code, not on the way it's implemented.
Pro Great language for Unity game engine
Unity provides a selection of programming languages depending on preference or knowledge - C#, JS, Boo and UnityScript. C# is arguably the most powerful with better syntax and stronger language structure. It allows using script files without attaching them to any game object (classes, methods inside unattached scripts that can be used at any time). There are more tutorials and information for C# than UnityScript and Visual Studio can be used to code for unity in C#. Additionally, learning C# allows using it outside of Unity as well unlike UnityScript.
Cons
Con Often-used products in most C# development environments get expensive
The majority of the C# development community uses Microsoft products which are not all free and open-source. As you get into the enterprise level of some of these products and subscriptions, the expense is multiple factors of 10 greater.
While you can use a fully open-source and free C# environment, the community around that is much smaller. While this can be said for other languages as well, the majority of C# falls into the for-pay Microsoft realm.
Con Dependecy on IDE
Most people learn and depend on VisualStudio to write C#. The result is people learn how to use an IDE and not the concepts or fundamentals of good programming. This isn't necessarily a knock on the language itself, but it is frustratingly difficult to do things in C# when not using VS.
Con Too easy to write multithreading apps that are buggy
Many web frameworks or GUI libraries will push novice users to writing multithreaded code, which leads to frustrating race condition bugs.
Other languages with multithreading push users towards safe constructs, like passing messages and immutable or synchronized containers. But in C# the data structures aren't synchronized by default, and it's too easy to just set a field and observe the result from another thread (until you compile with Release, and now you have a heisenbug).
Con Developer community is considered to be underskilled
This reputation similarly plagues the PHP community, and like that community, it is partly deserved. C# and its corresponding development stack is easy to use illicitly, which means barrier to entry is very low for developers. Combined with easily-accessible documentation and helpful community, it is possible to create a full C# application that the developer doesn't understand, by following tutorials.
While there are industry luminaries that are primarily C# developers (Jon Skeet, for instance), there are far more low-skilled workers in C# than in many other languages. Low-skilled developers are not generally drawn toward Lua or Haskell, they are drawn towards lucrative contracts that dictate the language to be used. One of those languages is C#.
Recommendations
Comments
Flagged Pros + Cons
Con .NET is a mess
Continual drama with standards, updates, Microsoft, and being really cross-platform.
Pro Very high demand in the industry.
C#'s been around for just the right amount of time, is regularly updated with useful additions, is versatile, easy to write & read, & has excellent tooling support. This means it is a top choice for many organisations & will remain so for the foreseeable future.
Con Overwrought tools can handicap developers
Visual Studio and its companion tools is the most sophisticated IDE in the world, except for perhaps Xcode. This leads to tool-users, who click their way through developing an application. Reliance on this tooling can decrease understanding of the way an application works, and can lead to subtle and difficult-to-reproduce bugs. Teams can become reliant on a tool to make changes to a system. If the tool is no longer supported, the system must be re-written. Tools are also not cheap. Some versions of Visual Studio are many hundreds of USD.
Out of Date Pros + Cons
Con Windows-centric
While in recent years, Microsoft has open-sourced most of the ASP.net development system and C#, it is still very Windows-centric. Most shops that run it, run Windows as well. Most development systems are not tied to an OS these days, but C# feels Windows-y. The docs are richer for Windows. The dev community runs Windows. They like Windows. If you don't like Windows, you are going to have a bad time.