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
Currying by Brian Leahy
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
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