Recs.
Updated
C# is multi-paradigm, managed and fully open-source language created by Microsoft. It runs on Windows, Linux, Mac, Android and iOS.
SpecsUpdate
Pros
Pro Async-await
C# invented the async-await pattern. Asynchronous programming is a must-have for any scalable web server or responsive mobile application. You can't simply freeze your app while you request that background image as you can't simply fire up a hundred thousand threads on your web server to deal with all the requests. What you do in these situations is use asynchronous programming. The problem is that, until C#4, async was really hard to get right. Now, with async-await, developers are able to write code just as they did with synchronous code. The language handles everything for you.
Pro LINQ
Language INtegrated Query provides declarative SQL-inspired syntax for querying data from a variety of sources. Databases, Web resources, and in memory collections can be queried using the same syntax.
This syntax drastically reduces the number of lines of code required to work with collections.
Pro Properties
Get and Set methods feel counter-productive. C# resolves this by making the notion of a "Property" part of the language itself. Auto-properties enables developers to write properties just like if they were fields, with its get and set acessors automatically implemented. The syntax for accessing properties is also cleaner: they work just like if you were accessing a field.
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 ASP.NET
ASP.NET Core is a blazing fast framework for building Web Applications and Web APIs in C#. ASP.NET Core ranked as the fastest mainstream framework in the TechEmpower Round 13 plaintext benchmark.
With ASP.NET Core, you can build MVC apps or REST APIs, as well as micro-services and even stateful web apps. ASP.NET Core comes equipped with Authentication and Authorization, and has also good community support, with libraries like OpenIddict, which implements the OpenId Authentication protocol in C#.
Pro XML documentation
Developers are able to document their code with XML tags like <summary>, <params> and even <b></b> or <br/> and then generate documentation pages through tooling.
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 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 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 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 Default parameter values
Default parameter values enable the developer to have optional parameters.
Pro Built-in tuples
C# 7 adds support for tuples built into the language. Instead of explicitly using generic Tuple classes, the developer is able to use parenthesis to represent a tuple. Tuples can also have named properties, so that instead of writing "Item1, Item2, Item3", you writed "Price, Quantity, Name".
Tuples can also be deconstructed into variables.
Pro Organized, meaningful namespaces
In a language like Java, for example, you have java.util. "util" conveys no meaningful information about what types you will find in there. On the other hand, C# namespaces were carefully thought-out in order to make it easy for the developer to navigate through the Base Class Library and to find the types they need. You will find TcpClient under System.Net, HttpClient under System.Net.Http, encryption-related classes under System.Security,Cryptography, File under System.IO, generic lists and dictionaries under System.Collections.Generic.
Pro .NET BCL
The .NET Base Class Library has everything covered. From basic things like collection, to utilities and/or advanced stuff, like System.Net.Http (for Http requests), System.Drawing (for drawing on the screen), System.Security (for everything security, including cryptography, JWT, etc.) and more.
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 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 organizations & 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 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.
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).
Cons
Con .NET stack lock-in
The tooling, the libraries, the frameworks etc. mostly is either created from and / or for Windows / Microsoft. Crossplatform development with C# is not fluent and until recently not official.
Con Lack of compile-time metaprogramming
The programmer is stuck with language features that are already implemented. Some problems, that can be easily solved in dynamic languages or languages with metaprogramming features have to be hacked around. Example : INotifyPropertyChanged invocations.
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 Expensive tooling
Visual Studio and ReSharper are quite expensive, especially for personal use. Visual Studio Community is an official version of Visual Studio and free for personal use and companies with up to 5 employees. However, Visual Studio Community is not as powerful as the full version (that is, Enterprise).
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 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 Suffers from excessive syntactic sugar - 12 different ways to do everything
Con Bad security access
As a c# dev, I can say that you'll run into errors like "access denied" whenever you try to do something that breaks the law.. However, this can be PARTLY fixed.(see here https://www.codeproject.com/Articles/5724/Understanding-NET-Code-Access-Security)
Recommendations
Comments
Flagged Pros + Cons
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 Incredibly Well-Engineered Language
Where other languages invoke the feeling of being a product of organic growth over time, C# just feels like an incredibly well-designed language where everything has its purpose and almost nothing is non-essential.
Pro With ASP CORE a good language to learn
With CORE you are no longer just limited to Windows, so a language worth learning.
Con Not standardized
Last, officially released standard is for C# 2, which is 10 years old. This limits possible 3rd party implementations.
Out of Date Pros + Cons
Con Microsoft is not a very trustworthy company
Microsoft has sole authority over language and plattform development. Microsoft only decides where .NET goes. Given Microsoft track record of 180°C decision changes and nixing development projects (IronPython, IronRuby, Silverlight, Astoria) makes developers wary.