我正在阅读的文本文件中包含数字。
返回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;
}
答案 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之间的空格组合。