7

默认情况下,引用类型数组被初始化为所有引用为空。

是否有任何语法技巧可以用新的默认对象来初始化它们?

例如

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

可以使用object 和 collection initializers,尽管您的版本可能更简洁,并且可以按原样用于更大的集合:

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 回答