我有一个打印多维矩阵的对象,例如:
namespace example;
Public class Object()
{
int lines, cols;
int matrix[,];
public Object(int lines, int cols)
{
this.lines = lines;
this.cols = cols;
matrix = new int[lines,cols];
PrintMatrix()
}
public void PrintMatrix()
{
Random rand = new Random();
Console.WriteLine();
for(int i = 0; i < lines ;i++)
for(int j = 0, j < cols; j++)
matrix[i,j]= rand.nextInt(1,10);
Console.WriteLine(matrix[i,j));
}
}
我想在控制台输出中打印如下内容:
matrix 1:
1 2 3
4 2 4
3 3 1
matrix 2:
2 3 4 4
1 1 2 2
3 3 4 4
1 1 8 8
matix 3:
...
所以我尝试将对象插入列表或数组列表中
static void Main(string[] args)
{
List<Object> conteiner = new List<Object>();
Object foo = new Object(3,3);
Object anotherFoo = new Object(4,4);
conteiner.add(foo);
conteiner.add(anotherFoo);
foreach(object item in conteiner)
{
console.WriteLine(item)
}
}
它打印:
example.Object.foo;
example.Object.anotherFoo;
代替多维数组。 我在做错什么,如何改善此解决方案?
答案 0 :(得分:1)
如果需要,您可以覆盖对象的默认ToString()
方法。
public override string ToString()
{
return PrintMatrix();
}
当然,这会迫使您使PrintMatrix()
返回一个字符串,但我建议这样做,因为这样做会更好,因为它具有更多可重用的代码。
我会写类似下面的内容:
public string PrintMatrix()
{
string result = string.Empty;
for(int i = 0; i < lines ;i++)
{
for(int j = 0, j < cols; j++)
{
matrix[i,j] = rand.Next(1,10);
result += $"{matrix[i,j]} ";
}
result += Environment.NewLine ;
}
return result;
}
如果您想知道为什么数字不是随机的,请尝试仅创建一个随机对象。然后,您可以像现在一样使用它。
答案 1 :(得分:0)
因为要打印的类型本身会调用默认的ToString()
,所以应该在每个对象实例上调用PrintMatrix()
。最好考虑给您的类型一个比Object
更好的名称,因为它是内置类型
foreach(Object item in conteiner)
{
item.PrintMatrix();
}