C# 初始化引用类型数组的简单方法?

C# 初始化引用类型数组的简单方法?,c#,arrays,reference,array-initialization,C#,Arrays,Reference,Array Initialization,默认情况下,引用类型数组初始化时所有引用都为null 有没有什么语法技巧可以用新的默认对象来初始化它们 乙二醇 公共类子类 { } 公共类父类 { 独生子女[]_children=新生子女[10]; 公共家长() { //有什么方法可以否定这种需要吗? 用于(int n=0;n

默认情况下,引用类型数组初始化时所有引用都为null

有没有什么语法技巧可以用新的默认对象来初始化它们

乙二醇

公共类子类
{
}
公共类父类
{
独生子女[]_children=新生子女[10];
公共家长()
{
//有什么方法可以否定这种需要吗?
用于(int n=0;n<_children.Length;n++)
_子项[n]=新子项();
}
}
使用LINQ:

 private Child[] _children = Enumerable
                                 .Range(1, 10)
                                 .Select(i => new Child())
                                 .ToArray();
您可以使用,尽管您的版本可能更简洁,并且可以按原样用于更大的集合:

private Child[] _children = new Child[] { 
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child()
};

即使for循环看起来比nice LINQ语句更糟糕,它的运行时行为也会更快。例如,一个数组中有20个表单的测试是0.7(对于循环)到3.5(LINQ)毫秒

不,这只是隐藏循环的明显方式(将其放入助手方法中,等等)。+1用于指出您想要的是语法技巧,而不是大多数人要求的——“我可以在不迭代数组的情况下执行此操作吗?”。但是,我假设您希望保持某种可读性,并且实际上能够一目了然地知道代码的功能但通常,我们并不在乎。不过还是有一个很好的警告,不要事事使用LINQ。
private Child[] _children = new Child[] { 
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child(),
new Child()
};