List <string []>显示列表值</string []>

时间:2012-07-02 16:42:17

标签: c# winforms

我的代码生成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[]

谁能告诉我我做错了什么?

5 个答案:

答案 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[]