为什么我要打印出“System.Int32[]”而不是我的数字数组
本文关键字:我的 数组 数字 打印 我要 Int32 System 为什么 | 更新日期: 2023-09-27 17:56:05
我正在尝试打印出分配给特定数组的数字数组。我选择数字的算法包括选择一个不重复的随机数并将其存储在数组中。
真的很简单,但我不知道为什么它会打印出这个错误。
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()
,你只需得到类类型的全名。
您可以通过几种方式修复它。仅打印循环内的当前项目,或在循环外一次打印一个项目:
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...
或者在打印前"展平"集合:
Console.WriteLine("My numbers: ", String.Join(", ", ticket1));
ticket1.ToString()
不打印数组的内容,只打印其类型,因为这是在数组上实现ToString()
方法的方式。
您可以通过多种方式解决此问题 - 例如,通过使用string.Join
方法:
Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));
因为你不是在写数组元素,而是在写数组本身,这就是ToString()
生成它的完整类型名称的原因。
将ticket1.ToString()
更改为for
循环中的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()
时,你会得到该对象的类型。 对于基本基元(值)类型,将重写此行为以输出值。 但是对于像数组这样的东西,没有"默认"字符串表示形式,所以你看到的行为是默认的。
您可以将数据包装在一个对象中,并覆盖该对象上的.ToString()
。 如果您必须在代码中的许多位置输出值,那将是要走的路,因此您只需编写一次逻辑。 ("智能数据结构和哑代码比相反的效果要好得多。
但是,如果您只需要在此处执行此操作,则可以直接输出值。 基本上,将值作为字符串以您想要的任何表示形式连接起来。 例如,如果它们应该以逗号分隔:
Console.WriteLine(
"{0}{1}",
item.PadRight(20),
string.Join(",", ticket1));