我们如何在控制台中输出所有的结构元素数组

本文关键字:结构 元素 数组 输出 控制台 我们 | 更新日期: 2023-09-27 18:24:33

我最近开始学习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;        
}  

我们如何在控制台中输出所有的结构元素数组

对象的实际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);
       }
    }
    

顺便说一句,公共领域被认为是糟糕的设计。公共财产是更好的选择。

例如,您可以重写结构的ToString()方法,或者访问Console.WriteLine(i);语句中Arrays的属性。

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;
    }
}  

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

public struct Arrays
{
    public Int32 X, Y;
    public override string ToString()
    {
        return X.ToString() + " " + Y.ToString();
    }
}