为什么我要打印 'System.Int32[]' 而不是数字数组?
Why am I printing out 'System.Int32[]' instead of my array of numbers?
我正在尝试打印出分配给特定数组的数字数组。我选择数字的算法包括选择一个不重复的随机数并将其存储在数组中。
真的很简单,但我不知道为什么打印出这个错误。
int[] ticket1 = new int[4];
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
}
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1.ToString());//ticket1 produces System.Int32[] instead of 4 numbers.
//I have changed this line to:
//Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
//And it still doesn't work. the error remains. (System.Int32[])
我的问题是,如何以字符串格式打印出我的 4 个数字(并排)。
//编辑: 我发现了我的问题。我将我的 ticket1 放在一个 foreach 循环中,它以某种方式没有接触到数组值,因此它打印出 System.Int32[] 相反。
全部修复。
因为您不是在编写数组元素,而是在编写数组 本身 ,这就是 ToString()
生成其完整类型名称的原因。
在 for
循环中将 ticket1.ToString()
更改为 ticket1[i]
。
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
Console.WriteLine("{0} {1}", item.PadRight(20), ticket1[i]);
}
如果您不想在 for
循环中打印它,那么您可以使用 String.Join
将数组中的所有元素连接成一个简单的字符串,例如;
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
}
Console.WriteLine("{0} {1}", item.PadRight(20), string.Join(",", ticket1));
如果您在这样的数组上调用 ToString()
,您只需获得 class 类型的全名。
您可以通过几种方式解决它。在循环内只打印当前项,或者在循环外一次打印每一项:
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...
或"flatten"打印前合集:
Console.WriteLine("My numbers: ", String.Join(", ", ticket1));
ticket1.ToString()
不打印数组的内容,只打印它的类型,因为这是在数组上实现 ToString()
方法的方式。
您可以通过多种方式解决此问题 - 例如,使用 string.Join
方法:
Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
因为当您在一个对象上调用 .ToString()
时,您会得到该对象的类型。对于基本原始(值)类型,此行为被覆盖以输出值。但是对于数组之类的东西,没有 "default" 字符串表示形式,因此您看到的行为是默认行为。
您可以将数据包装在一个对象中并覆盖该对象的 .ToString()
。如果您必须在代码中的许多地方输出值,那么您只需编写一次逻辑。 ("Smart data structures and dumb code works a lot better than the other way around." - 埃里克·雷蒙德)
但如果你只需要在这里做,那么你可以直接输出值。基本上以您想要的任何表示形式将值作为字符串加入。例如,如果它们应该以逗号分隔:
Console.WriteLine(
"{0}{1}",
item.PadRight(20),
string.Join(",", ticket1));
我正在尝试打印出分配给特定数组的数字数组。我选择数字的算法包括选择一个不重复的随机数并将其存储在数组中。
真的很简单,但我不知道为什么打印出这个错误。
int[] ticket1 = new int[4];
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
}
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1.ToString());//ticket1 produces System.Int32[] instead of 4 numbers.
//I have changed this line to:
//Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
//And it still doesn't work. the error remains. (System.Int32[])
我的问题是,如何以字符串格式打印出我的 4 个数字(并排)。
//编辑: 我发现了我的问题。我将我的 ticket1 放在一个 foreach 循环中,它以某种方式没有接触到数组值,因此它打印出 System.Int32[] 相反。
全部修复。
因为您不是在编写数组元素,而是在编写数组 本身 ,这就是 ToString()
生成其完整类型名称的原因。
在 for
循环中将 ticket1.ToString()
更改为 ticket1[i]
。
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
Console.WriteLine("{0} {1}", item.PadRight(20), ticket1[i]);
}
如果您不想在 for
循环中打印它,那么您可以使用 String.Join
将数组中的所有元素连接成一个简单的字符串,例如;
for (int i = 0; i < 4; i++)
{
int temp = rand.Next(43);
while (ticket1.Contains(temp))
{
temp = rand.Next(43);
}
ticket1[i] = temp;
}
Console.WriteLine("{0} {1}", item.PadRight(20), string.Join(",", ticket1));
如果您在这样的数组上调用 ToString()
,您只需获得 class 类型的全名。
您可以通过几种方式解决它。在循环内只打印当前项,或者在循环外一次打印每一项:
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...
或"flatten"打印前合集:
Console.WriteLine("My numbers: ", String.Join(", ", ticket1));
ticket1.ToString()
不打印数组的内容,只打印它的类型,因为这是在数组上实现 ToString()
方法的方式。
您可以通过多种方式解决此问题 - 例如,使用 string.Join
方法:
Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
因为当您在一个对象上调用 .ToString()
时,您会得到该对象的类型。对于基本原始(值)类型,此行为被覆盖以输出值。但是对于数组之类的东西,没有 "default" 字符串表示形式,因此您看到的行为是默认行为。
您可以将数据包装在一个对象中并覆盖该对象的 .ToString()
。如果您必须在代码中的许多地方输出值,那么您只需编写一次逻辑。 ("Smart data structures and dumb code works a lot better than the other way around." - 埃里克·雷蒙德)
但如果你只需要在这里做,那么你可以直接输出值。基本上以您想要的任何表示形式将值作为字符串加入。例如,如果它们应该以逗号分隔:
Console.WriteLine(
"{0}{1}",
item.PadRight(20),
string.Join(",", ticket1));