Index initializers C# with Example



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. 

0 Comment's

Comment Form