Easy way to initialise array of reference types?
-
02-07-2021 - |
Question
By default, an array of reference types gets initialised with all references as null.
Is there any kind of syntax trick to initialise them with new default objects instead?
eg
public class Child
{
}
public class Parent
{
private Child[] _children = new Child[10];
public Parent()
{
//any way to negate the need for this?
for (int n = 0; n < _children.Length; n++)
_children[n] = new Child();
}
}
Solution
Use LINQ:
private Child[] _children = Enumerable
.Range(1, 10)
.Select(i => new Child())
.ToArray();
OTHER TIPS
You could use object and collection initializers, though your version is probably terser and can be used as is for larger collections:
private Child[] _children = new Child[] {
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child()
};
Even if your for loop looks worse, than the nice LINQ statement the runtime behavior of it will be much faster. E.g. a test with 20 Forms in an array is 0.7 (for loop) to 3.5 (LINQ) milliseconds
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow