试图写一个数组,但结果是" System32 Int []"

时间:2015-01-05 21:24:39

标签: c#

我正在阅读的文本文件中包含数字。

返回System32 Int[]而不是我想看到的数字。我做错了什么?

static void Main(string[] args)
{
    StreamReader fromFile = new StreamReader("test.txt");
   int[] numbers = gatherNumbers(fromFile);
   Console.WriteLine("Files from test.txt has been gathered...");
    string textFile = userInput("Enter the filename that you wish to store the result in: ");
    StreamWriter tillFil = new StreamWriter(textFile);            
    tillFil.WriteLine("Summa " + numbers);
    Console.WriteLine("Summa " + numbers);
    tillFil.Close();
    Console.ReadLine();
}

private static int[] gatherNumbers(StreamReader fromFile)
{
    List<int> listan = new List<int>();
    string rad = fromFile.ReadLine();
    while (rad != null)
    {
        int tal = Convert.ToInt32(rad);
        listan.Add(tal);
        rad = fromFile.ReadLine();
    }     
    return listan.ToArray();     
}

private static string userInput(string nameOfTextFile)
{
    Console.WriteLine(nameOfTextFile);
    string answer = Console.ReadLine();
    return answer;
}

2 个答案:

答案 0 :(得分:4)

System.Array不会覆盖ToString - 因此您将获得打印类型名称的默认行为。这与做的没什么不同:

// namespace X { class Foo {} }
Foo f = new Foo();
Console.WriteLine(f); // Prints "X.Foo"

// http://ideone.com/YyfIqX
Console.WriteLine(new object[0]); // Prints System.Object[]
Console.WriteLine(new int[0]); // Prints System.Int32[]
Console.WriteLine(new string[0]); // Prints System.String[]

如果你想要一个逗号分隔列表之类的东西,你需要自己做。

var commaSeparated = String.Join(", ", numbers);

答案 1 :(得分:4)

当连接字符串和其他类型的实例时,编译器会发出如下所示的代码:

var tempValue = "This is a string" + thisIsSomeVariable.ToString();

因此,您的代码更准确地表示如下:

Console.WriteLine("Summa " + numbers.ToString());

在这种情况下,numbers是什么?它是一个整数数组,而不是字符串或基本类型。对于非基本类型,ToString的默认实现只打印出类型名称,在本例中为

  

System.Int32 []

或整数数组。你想做的是像

Console.WriteLine("Summa " + string.Join(" ", numbers));

连接将在数组中的每个int上调用ToString,然后将它们与每个int之间的空格组合。