C# 相同对象的数组
如果我想声明相同对象的数组(我指的是相同的构造函数参数值)。我能一次完成吗 在下面的示例中,如果我想创建4个具有相同维度(3、3、2)的box对象,我调用了构造函数4次。我能一次完成吗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
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();