Like C# offers a way to initialize objects, In same way, C# offers way to initialize Collections too. A one can initialize collections with set of items added to it.
Let me explain it using an email collection application of a console type.
1. Lets Create a class for Emails and Enum for Email Type
/// <summary>
/// Email information collection class
/// </summary>
public class Emails
{
/// <summary>
/// Email id
/// </summary>
public Guid guid;
/// <summary>
/// Email type
/// </summary>
public EmailType emailType;
/// <summary>
/// Email name
/// </summary>
public string email;
/// <summary>
/// Initializes instance of an Emails class
/// </summary>
/// <param name="guid">Email id</param>
/// <param name="emailType">Email type</param>
/// <param name="email">Email name</param>
public Emails(Guid guid, EmailType emailType, string email)
{
this.guid = guid;
this.emailType = emailType;
this.email = email;
}
}
2. Creating an Enum of an Email Type that is used in above class to get an EmailType.
/// <summary>
/// Email type
/// </summary>
public enum EmailType
{
/// <summary>
/// General
/// </summary>
General,
/// <summary>
/// Organization
/// </summary>
Organization,
/// <summary>
/// Collected
/// </summary>
Collected
}
3. Creating a main method without Collection Initializer.
If we wanted to create a list which contain a collection of emails, we need to do something like this with C# 2.0:
static void Main(string[] args)
{
// Creating collection of emails class
List<Emails> emails = new List<Emails>();
emails.Add(new Emails(new Guid(), EmailType.Organization,sanjay.patolia@patni.com));
// Getting data from collections
emails.ToList().ForEach(n =>
{
Console.WriteLine(n.guid);
Console.WriteLine(n.email);
Console.WriteLine(n.emailType.ToString());
});
Console.ReadKey(true);
}
4. Creating a main method with Collection Initializer.
It will be more simpler when we use Collection Initializer.
static void Main(string[] args)
{
// Creating collection of emails class
IEnumerable<Emails> emails = new List<Emails>
{
new Emails(new Guid(), EmailType.Collected, sanjay.patolia@gmail.com),
new Emails(new Guid(), EmailType.General, sanjay.patolia@yahoo.com)
};
// Getting data from collections
emails.ToList().ForEach(n =>
{
Console.WriteLine(n.guid);
Console.WriteLine(n.email);
Console.WriteLine(n.emailType.ToString());
});
Console.ReadKey(true);
}
How it made up:
object initializers are enclosed in "{" and "}" and seperated by commas ",".
Rules to be followed by collection intializers:
1. Object to which collection intializer is applied must be of type that implements System.Collections.Generic.ICollection<T>.
2. It invokes a ICollection<T>.Add(T) for each element in order.