TIL there is a convenient shorthand way of setting public members of an object when defining a new instance.
Imagine have a class 'Animal' with public properties such as its name and how many legs it has. For object initializers to work correctly the class we're initializing must have a public, parameterless constructor.
public class Animal
{
public string Name { get; set; }
public int NumLegs { get; set; }
public Animal() { }
public override string ToString()
{
return Name + " has " + NumLegs + " legs.";
}
}
Traditionally we'd initialize an object of the Animal class by creating a new variable in one statement and then populate its members one-by-one in the following statements.
var critter = new Animal();
critter.Name = "Bear";
critter.NumLegs = 4;
But with an object initializer, we can populate the public members in the same statement that the object is declared:
var creature = new Animal
{
Name = "Penguin",
NumLegs = 2
};
The initializer is just a block that follows the class' name when you're declaring a new object of a class with a parameterless constructor.
You don't have to populate all of the public properties, only the ones you want.