C# 3.0

 
Implicit typed local variables: are welcome.
 
Lambda-expressions: statement vs. expression body – can’t wait to get used to those.
 
Extension methods are freaking me out. Probably because it contradicts MS-own guidelines based on "the code is for humans to read".
 
Object initializers: Nice "short-cuts".

public class Point
{
      int x, y;

      public int X { get { return x; } set { x = value; } }
      public int Y { get { return y; } set { y = value; } }
}

An instance of Point can be created and initialized as follows:

var a = new Point { X = 0, Y = 1 }; 

public class Rectangle
{
      Point p1, p2;

      public Point P1 { get { return p1; } set { p1 = value; } }
      public Point P2 { get { return p2; } set { p2 = value; } }
}

An instance of Rectangle can be created and initialized as follows:

var r = new Rectangle {
      P1 = new Point { X = 0, Y = 1 },
      P2 = new Point { X = 2, Y = 3 }
};

which has the same effect as

var r = new Rectangle();
var __p1 = new Point();
__p1.X = 0;
__p1.Y = 1;
r.P1 = __p1;
var __p2 = new Point();
__p2.X = 2;
__p2.Y = 3;
r.P2 = __p2;

 or:

var r = new Rectangle {
      P1 = { X = 0, Y = 1 },
      P2 = { X = 2, Y = 3 }
};

which has the same effect as

var r = new Rectangle();
r.P1.X = 0;
r.P1.Y = 1;
r.P2.X = 2;
r.P2.Y = 3;

Collection initializers: sweet. 

List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Anonymous types: useful. 

var p1 = new { Name = "Lawnmower", Price = 495.00 };
var p2 = new { Name = "Shovel", Price = 26.95 };
p1 = p2;

the assignment on the last line is permitted because p1 and p2 are of the same anonymous type.

Implicitly typed arrays: thanks!

var a = new[] { 1, 10, 100, 1000 };

 

 

 

C# 3.0

Leave a comment