7

デフォルトでは、参照型の配列はすべての参照が null として初期化されます。

代わりに、新しいデフォルト オブジェクトでそれらを初期化する構文のトリックはありますか?

例えば

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();
    }
}
4

4 に答える 4

8

LINQ を使用します。

 private Child[] _children = Enumerable
                                 .Range(1, 10)
                                 .Select(i => new Child())
                                 .ToArray();
于 2012-09-19T09:59:47.700 に答える
3

オブジェクトとコレクションの初期化子を使用できますが、バージョンはおそらくより簡潔であり、より大きなコレクションにはそのまま使用できます。

private Child[] _children = new Child[] { 
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child()
};
于 2012-09-19T10:00:53.520 に答える
3

Array.Fillメソッドを使用できます。

public static void Fill<T> (T[] array, T value);
public class Child
{
}

public class Parent
{
    private Child[] _children = new Child[10];

    public Parent()
    {
        Array.Fill(_children, new Child());
    }
}
于 2021-11-11T23:27:25.070 に答える
2

for ループの見た目が悪くても、優れた LINQ ステートメントよりも実行時の動作がはるかに高速になります。たとえば、配列内に 20 個のフォームがあるテストは、0.7 (for ループ) から 3.5 (LINQ) ミリ秒です。

于 2014-03-19T14:44:58.813 に答える