如何在C#中读取对象列表项

时间:2018-11-06 11:33:56

标签: c# arrays list arraylist multidimensional-array

我有一个打印多维矩阵的对象,例如:

 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;

代替多维数组。  我在做错什么,如何改善此解决方案?

2 个答案:

答案 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();
 }