相同对象的数组
本文关键字:数组 对象 | 更新日期: 2023-09-27 18:13:19
如果我想声明相同对象的数组(我的意思是相同的构造函数参数值)。我可以一次完成吗?
在下面的例子中,如果我想创建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);
}
}
看情况。因为这是一个class
,你需要调用new
4次,如果你想得到4个不同的对象。然而,你的盒子看起来是不可变的;如果您乐意将同一个对象使用4次(在这里可能是合理的),您可以使用:
var box = new Box(3,3,2);
var matchBoxes = new[] {box,box,box,box};
如果这是您的Box
类型的全部,那么可能还需要考虑使其成为struct
(不可变的、小的、值式确定的struct
候选)。那么它是没有意义的:它将在每个位置是不同的值。不过,结构可以与上面相同。
如果你想创建4个新对象,你必须调用4次构造函数。如果不想键入,请使用cycle:
for(int i = 0; i < 4; i++) matchBoxes[i] = new Box(3, 3, 2);
很多答案都是正确的(使用结构体,使用循环);
只是为了完成:
Box[] matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();
注意正如Marc Gravell所说,这将不会给出Box的单独副本,除非它是一个valuetype。
你甚至可以让它更一般:
var generator = Enumerable.Repeat(new Box(3, 3, 2));
// ....
var fourBoxes = generator.Take(4);
var twentyBoxes = generator.Take(20);
var matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();
没有。每个对象都需要单独创建。使用循环:)
为什么不使用循环,在构造函数中传递参数?
我希望这能解决你的问题,
Box[] matchBoxes = new Box[]{ new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2)};