如果我想声明一个相同对象的数组(我的意思是相同的构造函数参数值)。我可以一拍吗。
在下面的例子中如果我想创建4个具有相同尺寸(3,3,2)的盒子对象,我调用了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);
}
}
答案 0 :(得分:3)
这取决于。由于这是class
,您需要拨打new
4次如果您想获得4个不同的对象。但是,你的盒子看起来是不可变的;如果您乐意使用相同的对象4次(这可能是合理的),您可以使用:
var box = new Box(3,3,2);
var matchBoxes = new[] {box,box,box,box};
如果这是Box
类型的全部内容,那么可能也要考虑将其设为struct
(不可变的,小的,值 - esque - 明确{{ 1}}候选人)。然后它没有实际意义:将在每个位置都是不同的值。但是,构造可以与上面相同。
答案 1 :(得分:1)
如果要创建4个新对象,则必须调用构造函数4次。如果您不想输入它,请使用cycle:
for(int i = 0; i < 4; i++) matchBoxes[i] = new Box(3, 3, 2);
答案 2 :(得分:1)
许多答案都是正确的(使用结构,使用循环);
要完成:
Box[] matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();
注意正如Marc Gravell所说,这将 NOT 提供Box的单独副本,除非它是一个值类型。
你甚至可以使它更通用:
var generator = Enumerable.Repeat(new Box(3, 3, 2));
// ....
var fourBoxes = generator.Take(4);
var twentyBoxes = generator.Take(20);
答案 3 :(得分:0)
不。每个对象都需要单独创建。 使用循环:)
答案 4 :(得分:0)
为什么不使用循环,在构造函数中传递参数?
答案 5 :(得分:0)
我希望这能解决你的问题,
Box[] matchBoxes = new Box[]{ new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2), new Box(3, 3, 2)};
答案 6 :(得分:0)
var matchBoxes = Enumerable.Repeat(new Box(3, 3, 2), 4).ToArray();