我们如何在控制台中输出所有struct元素数组?

时间:2014-09-26 11:21:58

标签: c#

我最近开始学习c#。你能帮我写一个正确的循环,以便打印所有的元素。

class Program
{        
    static void Main(string[] args)
    {            
        Arrays[] arr = new Arrays[500]; //Initialize an array
        arr[2].X = 11;     

        foreach (var i in arr) //Trying to loop through
        {
            Console.WriteLine(i); //Result: Array.Array
        }
    }
}
public struct Arrays
{
    public Int32 X, Y;        
}  

3 个答案:

答案 0 :(得分:3)

对象的默认ToString()实现只会输出对象的类型,这就是您只看到Array.Array的原因。

您有两种选择:

  1. 在循环中进行格式化:

    foreach (var i an arr) {
      Console.WriteLine("X: {0}, Y: {1}", i.X, i.Y);
    }
    
  2. 使用自定义实现覆盖ToString

    public struct Arrays
    {
       public Int32 X, Y;
    
       public override string ToString() {
         return string.Format("X: {0}, Y: {1}", this.X, this.Y);
       }
    }
    
  3. 顺便说一句,公共领域被认为是糟糕的设计。公共财产是更好的选择。

答案 1 :(得分:2)

例如,您可以覆盖结构的ToString()方法,或者在Console.WriteLine(i);语句中访问数组的属性。

class Program
{        
    static void Main(string[] args)
    {            
        Arrays[] arr = new Arrays[500]; //Initialize an array
        arr[2].X = 11;     

        foreach (var i in arr) //Trying to loop through
        {
            Console.WriteLine(i); //Result: Array.Array
        }
    }
}
public struct Arrays
{
    public Int32 X, Y;      

    public override string ToString()
    {
        return X + " x " + Y;
    }
}  

答案 2 :(得分:1)

Console.WriteLine(i);方法需要类型为System.String的参数。当您向其提供类型Arrays的结构时,它通过调用每个结构或对象具有的String方法将其隐式转换为ToString。默认情况下,它只打印类型的名称 - 正是您所看到的。 您可以覆盖ToString方法来更改输出。

public struct Arrays
{
    public Int32 X, Y;

    public override string ToString()
    {
        return X.ToString() + " " + Y.ToString();
    }
}