Index initializers C# with Example
Index initializers make it possible to create and initialize objects with indexes at the same time. This makes initializing Dictionaries very easy: var dict = new Dictionary() { ["foo"] = 34, ["bar"] = 42 }; Any object that has an indexed getter or setter can be used with this syntax: class Program { public class MyClassWithIndexer { public int this[string index] { set { Console.WriteLine($"Index: {index}, value: {value}"); } } } public static void Main() { var x = new MyClassWithIndexer() { ["foo"] = 34, ["bar"] = 42 }; Console.ReadKey(); } } Output: Index: foo, value: 34 Index: bar, value: 42 View Demo If the class has multiple indexers it is possible to assign them all in a single group of statements: class Program { public class MyClassWithIndexer { public int this[string index] { set { Console.WriteLine($"Index: {index}, value: {value}"); } } public string this[int index] { set { Console.WriteLine($"Index: {index}, value: {value}"); } } } public static void Main() { var x = new MyClassWithIndexer() { ["foo"] = 34, ["bar"] = 42, [10] = "Ten", [42] = "Meaning of life" }; } } Output: Index: foo, value: 34 Index: bar, value: 42 Index: 10, value: Ten Index: 42, value: Meaning of life It should be noted that the indexer set accessor might behave differently compared to an Add method (used in collection initializers). For example: var d = new Dictionary { ["foo"] = 34, ["foo"] = 42, }; // does not throw, second value overwrites the first one versus: var d = new Dictionary { { "foo", 34 }, { "foo", 42 }, }; // run-time ArgumentException: An item with the same key has already been added.