C# 相同对象的数组

C# 相同对象的数组,c#,arrays,C#,Arrays,如果我想声明相同对象的数组(我指的是相同的构造函数参数值)。我能一次完成吗 在下面的示例中,如果我想创建4个具有相同维度(3、3、2)的box对象,我调用了构造函数4次。我能一次完成吗 class Program { static void Main(string[] args) { Box b = new Box(3, 4, 7); Console.WriteLine(b.getVolume()); Box[] matchBox

如果我想声明相同对象的数组(我指的是相同的构造函数参数值)。我能一次完成吗

在下面的示例中,如果我想创建4个具有相同维度(3、3、2)的box对象,我调用了构造函数4次。我能一次完成吗

class Program
{
    static void Main(string[] args)
    {
        Box b = new Box(3, 4, 7);
        Console.WriteLine(b.getVolume());

        Box[] matchBoxes = new Box[4];
        matchBoxes[0] = new Box(3, 3, 2);
        matchBoxes[1] = new Box(3, 3, 2);
        matchBoxes[2] = new Box(3, 3, 2);
        matchBoxes[3] = new Box(3, 3, 2);


        Console.ReadLine();

    }


}

class Box
{
    private int length;
    private int breadth;
    private int height;
    public Box(int l, int b, int h)
    {
        this.length = l;
        this.breadth = b;
        this.height = h;
    }
    public int getVolume()
    {
        return (this.length*this.breadth*this.height);
    }

}

没有。每个对象都需要单独创建。
使用循环:)

这取决于。由于这是一个
,如果你想得到4个不同的对象,你需要调用
new
4次。然而,你的盒子看起来是不可变的;如果您乐于使用同一对象4次(这在这里可能是合理的),您可以使用:

var box = new Box(3,3,2);
var matchBoxes = new[] {box,box,box,box};

如果这是您的代码> Box 类型的整体,您可能还需要考虑将其定义为<代码>结构> <代码>(不变的、小的、有价值的、明确的<代码>结构> <代码>候选者)。那么它就没有意义了:它在每个位置都将是一个不同的值。构造可以与上面相同。

如果要创建4个新对象,必须调用构造函数4次。如果不想键入,请使用“循环”:

for(int i = 0; i < 4; i++) matchBoxes[i] = new Box(3, 3, 2); 
用于(int i=0;i<4;i++)火柴盒[i]=新火柴盒(3,3,2);

为什么不使用循环,在构造函数中传递参数?

我希望这能解决您的问题

Box[] matchBoxes = new Box[]{ new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2)};

许多答案都很准确(使用结构,使用循环)

完整地说:

    Box[] matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();
注意如Marc Gravell所述,除非是valuetype,否则不会提供该框的单独副本

你甚至可以让它更一般化:

    var generator   = Enumerable.Repeat(new Box(3, 3, 2));

    // ....
    var fourBoxes   = generator.Take(4);
    var twentyBoxes = generator.Take(20);

而且,我真的不明白为什么你需要一次就完成。这对我来说很清楚,也不太复杂。一次完成会更复杂shot@JohnSaunders哈哈,我真的不知道。奇怪的词它的意思是“宽的特征”@JohnSaunders它也是“宽”的同义词。从未听说您的数组将包含4个相同的对象,即一个对象4次。“我想这不是普雷维想要的。”卡雷尔请读我写的;我注意到该类型是不可变的,因此使用同一实例4次可能是合理的。我还强调,如果你每次都想要一个不同的实例,你每次都需要调用
new
。我理解你的意思,但Praveen问了这个问题,他不是在说“不变性”。@KarelFrajtak他在说什么真的重要吗?只要它是适用的(它是),我会说它是fine@Karel我提供了选择。在所问的问题中,通过所示的示例,重复使用我已经说明的实例是完全合理的。尽管OP提到了不变性,但这仍然适用于这里,值得注意。我还提到,如果需要不同的对象,每次都需要使用
new
。请问:你具体批评什么?通常重要的是,不仅仅要看OP在用词问什么,还要看上下文来理解整个场景。我觉得我已经这样做了。有人可能会说情况变得更糟了。我想,它确实删除了阵列长度的冗余规范
var matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();