C# 3.0 Features Basics For LINQ – PART 1


The 'var' Keyword

  1. Type inferred at compile time
  2. Can only be defined within method scope
  3. Mostly used when you need a variable for anonymous types which can only be resolved at compile time e.g. LINQ queries

Auto Implemented properties

This feature eases the creation of properties for a field inside the C# class  e.g.

   1:  //C# 3.0 Code 
   2:  class Contact
   3:  {
   4:      public string Phone { get; set; }
   5:      public string Name { get; set; }
   6:  }
In the above code, we create two properties.The compiler automatically creates a private variable here accessed only via getters and setters. 
In C# 2.0 we would write a considerably big code for achieving this :
   1:  //C# 2.0 Code 
   2:  Class Contact { 
   3:   private string _name;
   4:   public String Name {
   5:      get {
   6:          If(_name != null )  {
   7:              return _name;
   8:          }
   9:      set {
  10:          _name = value;
  11:      }
  12:  }
 

Making Sense Of Object Initializers

In C# 3.0 you can use object initializers to assign values to accessible fields/properties at the time of object creation e.g.

   1:  // C# 3.0;Object initializer for our Contact class 
   2:  Contact myContact = new Contact { Phone = '1212', Name = 'Bindesh' }; 

This is useful when we want to use the anonymous types , since the only way to initialize them are using object initializers . It also helps in selecting a portion of the data that is needed from all the available data in an class e.g.


 

   1:  class Contact {
   2:      public string FirstName { get; set; }
   3:      public string LastName { get;set;}
   4:      public string  Email {get;set;}
   5:      public string Phone {get;set;}
   6:  }
   7:  var contact = from c in Contacts
   8:             select new { c.FirstName, c.LastName, c.Email } ;
Collection Initializers

As is the case with object initializers, you can also have the Collections initialized in a short way, like

   1:  //C# 3.0;Collections Initializer
   2:  List <Contact> contacts = new List <Contact> { 
   3:                                              {'Bindesh', 'Vijayan'},
   4:                                              {'Madhuban', 'Singh'},
   5:                                              {'Sukesh', 'A K'}
   6:                                           };

The same would have taken a considerable work in C# 2.0, e.g.

   1:  List<Contact> contacts = new List<Contact>();
   2:  //call Add each time for adding values
   3:  contacts.Add( new Contact('Bindesh', 'Vijayan'));
The collection initializer can work for all the types that meets the following criteria :
  • Implements IEnumerable interface
  • Has a public Add() method

 

 
Skip to main content