質問

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();
    }
}
役に立ちましたか?

解決

Use LINQ:

 private Child[] _children = Enumerable
                                 .Range(1, 10)
                                 .Select(i => new Child())
                                 .ToArray();

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top