我最近开始学习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 :(得分:3)
对象的默认ToString()
实现只会输出对象的类型,这就是您只看到Array.Array
的原因。
您有两种选择:
在循环中进行格式化:
foreach (var i an arr) {
Console.WriteLine("X: {0}, Y: {1}", i.X, i.Y);
}
使用自定义实现覆盖ToString
:
public struct Arrays
{
public Int32 X, Y;
public override string ToString() {
return string.Format("X: {0}, Y: {1}", this.X, this.Y);
}
}
顺便说一句,公共领域被认为是糟糕的设计。公共财产是更好的选择。
答案 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();
}
}