Easy way to initialise array of reference types?
-
02-07-2021 - |
Domanda
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();
}
}
Soluzione
Use LINQ:
private Child[] _children = Enumerable
.Range(1, 10)
.Select(i => new Child())
.ToArray();
Altri suggerimenti
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow