我的代码生成List<string[]>
变量,但无法弄清楚如何让它在文本框中正确显示。
List<string[]> test = parseCSV();
for (int i = 0; i < test.Count; i++)
{
Console.WriteLine("i = {0}",i);
Console.WriteLine("test[i] = {0}", test[i]);
nameList.Text = test[i].ToString() + "\n" + nameList.Text;
}
当我将test[i]
输出到控制台时,它会正确显示字符串信息,但当我将test[i]
输出到文本框时,我得到:
System.String[]
System.String[]
System.String[]
System.String[]
System.String[]
System.String[]
谁能告诉我我做错了什么?
答案 0 :(得分:5)
这是一种常见的误解,ToString
显示在variety of situations中。它不是一个神奇的格式化向导,即使原始类型似乎“按预期”工作。 ToString只是提供了对手头数据的合理表示。
在数组数据的情况下,.Net为每个ToString调用输出整个数组(调试器大量使用它)可能是令人讨厌的并且可能是不正确的。想象一下60x60x10的3D字符串数组。我不愿意等待渲染,因为我将鼠标放在调试器中的数组上。
在这种情况下,您可以使用String.Join
:
for (int i = 0; i < test.Count; i++)
{
Console.WriteLine("i = {0}",i);
Console.WriteLine("test[i] = {0}", test[i]);
nameList.Text = String.Join(", ", test[i]) + "\n" + nameList.Text;
}
答案 1 :(得分:4)
test[i]
是一个字符串数组。数组不会覆盖ToString()
,因此您只是获取默认实现,它显示了对象的类型(在这种情况下为System.String[]
)。
目前还不清楚你想要做什么。例如,您可以使用:
Console.WriteLine("test[i] = {0}", string.Join(", ", test[i]));
...从数组中的所有字符串创建逗号分隔的字符串。
编辑:请注意:
Console.WriteLine("test[i] = {0}", test[i]);
实际上是从每个字符串数组中打印出 first 字符串。它使用数组协方差将string[]
转换为object[]
。要更清楚地执行相同的操作,您可以使用:
Console.WriteLine("test[i] = {0}", test[i][0]);
因此,如果您希望只是将每个数组的第一个值放入文本框中,您可以使用:
nameList.Text = test[i][0] + "\r\n" + nameList.Text;
(请注意,这将有效地颠倒“行”的顺序。)我已将\n
更改为\r\n
,因为这是Windows上用于换行符的文本框。)
答案 2 :(得分:1)
您在列表中存储字符串数组。正确的代码是:
foreach (string[] items in test)
foreach (string item in items)
{
...
}
这将遍历列表中的所有数组,然后遍历当前数组中的所有项目。
答案 3 :(得分:0)
以下是如何将数组中的所有字符串连接在一起的示例:Array.ToString()
答案 4 :(得分:0)
你在test [i]上使用ToString()方法.ToString()请像这个测试一样使用它[i]
根据您的知识Object.ToString()返回表示当前对象的字符串。
因此你得到了
System.String[]
System.String[]
System.String[]
System.String[]
System.String[]
System.String[]