为什么我要打印出来' System.Int32 []'而不是我的数字数组?

时间:2015-06-13 12:06:21

标签: c# int int32

我正在尝试打印出已分配给特定数组的数字数组。我选择数字的算法包括选择一个不重复的随机数并将其存储在数组中。

非常简单,但我不知道为什么要打印出这个错误。

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 []。

全部修复。

4 个答案:

答案 0 :(得分:4)

如果你在类似的数组上调用ToString(),你只需获得类的类型的全名。

你可以通过几种方式解决它。仅打印循环内的当前项目,或在循环外一次打印一个项目:

Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[0]);
Console.WriteLine("{0}{1}", item.PadRight(20), ticket1[1]);
// etc...

或&#34;展平&#34;打印前的集合:

Console.WriteLine("My numbers: ", String.Join(", ", ticket1));

答案 1 :(得分:4)

ticket1.ToString()不打印数组的内容,只打印其类型,因为这是在数组上实现ToString()方法的方式。

您可以通过多种方式解决此问题 - 例如,使用string.Join方法:

Console.WriteLine("{0}{1}", item.PadRight(20), string.Join(",", ticket1));

答案 2 :(得分:2)

因为您没有编写数组元素,所以您正在编写数组本身,这就是ToString()生成它的完整类型名称的原因。

ticket1.ToString()圈中的ticket1[i]更改为for

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

答案 3 :(得分:1)

因为当您在对象上调用.ToString()时,您将获得该对象的类型。对于基本原语(值)类型,将覆盖此行为以输出值。但对于像阵列这样的东西,没有&#34;默认&#34;字符串表示,因此您看到的行为是默认行为。

您可以将数据包装在对象中并覆盖该对象上的.ToString()。如果你必须在代码中的许多地方输出值,那么你只需要编写一次逻辑。 (&#34;智能数据结构和哑代码比其他方式更好。&#34; - Eric Raymond)

但如果你只需要在这里做,那么你可以直接输出值。基本上将值作为字符串以您想要的任何表示形式连接。例如,如果它们应以逗号分隔:

Console.WriteLine(
  "{0}{1}",
  item.PadRight(20),
  string.Join(",", ticket1));