Hidden Features of C#? [closed]

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:


  • 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


  • 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


  • ?? (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


  • 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


  • netmodules by kokos
  • LINQBridge by Duncan Smart
  • Parallel Extensions by Joel Coehoorn


Leave a Comment