Hidden Features of C#?

c#, hidden-features

Solution

This isn't C# per se, but I haven't seen anyone who really uses `System.IO.Path.Combine()` to the extent that they should. In fact, the whole Path class is really useful, but no one uses it!

I'm willing to bet that every production app has the following code, even though it shouldn't:

string path = dir + "\\" + fileName;

Problem

This came to my mind after I learned the following from this question: ``` where T : struct ``` We, C# developers, all know the basics of C#. I mean declarations, conditionals, loops, operators, etc. Some of us even mastered the stuff like Generics, anonymous types, lambdas, LINQ, ... But what are the most hidden features or tricks of C# that even C# fans, addicts, experts barely know? Here are the revealed features so far: Keywords - `yield` by Michael Stum - `var` by Michael Stum - `using()` statement by kokos - `readonly` by kokos - `as` by Mike Stone - `as` / `is` by Ed Swangren - `as` / `is` (improved) by Rocketpants - `default` by deathofrats - `global::` by pzycoman - `using()` blocks by AlexCuse - `volatile` by Jakub Šturc - `extern alias` by Jakub Šturc Attributes - `DefaultValueAttribute` by Michael Stum - `ObsoleteAttribute` by DannySmurf - `DebuggerDisplayAttribute` by Stu - `DebuggerBrowsable` and `DebuggerStepThrough` by bdukes - `ThreadStaticAttribute` by marxidad - `FlagsAttribute` by Martin Clarke - `ConditionalAttribute` by AndrewBurns Syntax - `??` (coalesce nulls) operator by kokos - Number flaggings by Nick Berardi - `where T:new` by Lars Mæhlum - Implicit generics by Keith - One-parameter lambdas by Keith - Auto properties by Keith - Namespace aliases by Keith - Verbatim string literals with @ by Patrick - `enum` values by lfoust - @variablenames by marxidad - `event` operators by marxidad - Format string brackets by Portman - Property accessor accessibility modifiers by xanadont - Conditional (ternary) operator (`?:`) by JasonS - `checked` and `unchecked` operators by Binoj Antony - `implicit and explicit` operators by Flory Language Features - Nullable types by Brad Barker - Anonymous types by Keith - `__makeref __reftype __refvalue` by Judah Himango - Object initializers by lomaxx - Format strings by David in Dakota - Extension Methods by marxidad - `partial` methods by Jon Erickson - Preprocessor directives by John Asbeck - `DEBUG` pre-processor directive by Robert Durgin - Operator overloading by SefBkn - Type inferrence by chakrit - Boolean operators taken to next level by Rob Gough - Pass value-type variable as interface without boxing by Roman Boiko - Programmatically determine declared variable type by Roman Boiko - Static Constructors by Chris - Easier-on-the-eyes / condensed ORM-mapping using LINQ by roosteronacid - `__arglist` by Zac Bowling Visual Studio Features - Select block of text in editor by Himadri - Snippets by DannySmurf Framework - `TransactionScope` by KiwiBastard - `DependantTransaction` by KiwiBastard - `Nullable<T>` by IainMH - `Mutex` by Diago - `System.IO.Path` by ageektrapped - `WeakReference` by Juan Manuel Methods and Properties - `String.IsNullOrEmpty()` method by KiwiBastard - `List.ForEach()` method by KiwiBastard - `BeginInvoke()`, `EndInvoke()` methods by Will Dean - `Nullable<T>.HasValue` and `Nullable<T>.Value` properties by Rismo - `GetValueOrDefault` method by John Sheehan Tips & Tricks - Nice method for event handlers by Andreas H.R. Nilsson - Uppercase comparisons by John - Access anonymous types without reflection by dp - A quick way to lazily instantiate collection properties by Will - JavaScript-like anonymous inline-functions by roosteronacid Other - netmodules by kokos - LINQBridge by Duncan Smart - Parallel Extensions by Joel Coehoorn

Original source

Related problems