2014-09-26 32 views
0

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

什么问题?循环本身或输出格式或异常? – qxg 2014-09-26 11:24:28

+3

你期待*输出是什么,为什么? (提示:你没有重写'ToString()'方法,所以你只是打印出默认实现的任何东西。或者重写'ToString()',或者使用'Console.WriteLine(“X:{0} ,Y:{1}“,iX,iY);'。我也强烈建议不要使用可变值类型和公共字段 – 2014-09-26 11:26:08

回答

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

您赢得了比赛。 – AndreySarafanov 2014-09-26 11:28:28

1

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

的defaul 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); 
        } 
    } 
    

一在旁边,公共领域被认为是糟糕的设计。公共财产是更好的选择。

相关问题