只能通过迭代for循环显示数组

时间:2012-01-21 02:27:34

标签: c#

您好我正在尝试制作一个下载文件的C#程序,但我遇到了数组问题。

我把它分开下载文本并将其放入2级锯齿状数组(string [] [])。

现在我按行分割文本行char所以每行的格式如下: {文件名} | {filedescription} | {filehttppath} | {previewimagepath} | {长度} | {源}

当我使用简短的测试文本将其放入文本框时,它在文本框中显示正常。

IE:像test | test | test | test | test | test

这样的字符串

但是如果我输入一个真正的字符串,我将实际用于程序到DL文件,我得到字符串的唯一方法是使用for或foreach循环迭代它。如果我尝试使用索引访问数据,我会得到索引丢失错误。 (IE数组[0])

所以这是获取要显示的数组的代码:

public Form2(string[][] textList, string path)
{
    InitializeComponent();
    textBox1.Text = textBox1.Text + path + Environment.NewLine;
    WebClient downloader = new WebClient();
    foreach (string[] i in textList)
    {
        for(int j=0;j<i.Length;j++)
        {
            textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine;
        }
    }
}

然后这是给索引遗漏错误的代码:

public Form2(string[][] textList, string path)
{
    InitializeComponent();
    textBox1.Text = textBox1.Text + path + Environment.NewLine;
    WebClient downloader = new WebClient();
    foreach (string[] i in textList)
    {
        textBox1.Text = textBox1.Text + i[0] + Environment.NewLine;
        textBox1.Text = textBox1.Text + i[1] + Environment.NewLine;
        textBox1.Text = textBox1.Text + i[2] + Environment.NewLine;
        textBox1.Text = textBox1.Text + i[3] + Environment.NewLine;
        textBox1.Text = textBox1.Text + i[4] + Environment.NewLine;
        textBox1.Text = textBox1.Text + i[5] + Environment.NewLine;
    }
}

任何帮助都是这样的,我不明白为什么我可以通过for循环访问他们的数据但不直接它对我没有任何意义。

此外,这是生成数组的代码:

public String[][] finalList(string[] FileList)
{
    String[][] FinalArray = new String[FileList.Length][];
    for (int i = 0; i<FinalArray.Length;i++)
    {
        string[] fileStuff = FileList[i].Split(new char[] {'|'});
        FinalArray[i] = fileStuff;
    }
    return FinalArray;
}

3 个答案:

答案 0 :(得分:4)

在第一个示例中,您使用每个内部数组的实际长度来进行连接。在你的第二个例子中,你被硬编码到相同的长度,但你在介绍中说它是一个锯齿状的阵列。

您能显示输入文字的样子吗?

你在第一和第二个例子中没有做同样的连接,所以产生的结果非常不同。

        first = "\r\n Crazy Video\r\n\\\\newline\r\nThis Video is absolutly crazy!\r\n\\\\newline\r\nhtt://fakeurl.fake/vidfolder/video.flv\r\n\\\\newline\r\nhtt://fakeurl.fake/imgfolder/img.j‌​pg\r\n\\\\newline\r\n300\r\n\\\\newline\r\nhtt://fakeurl.fake \r\n\\\\newline\r\n"

        second = "\r\n Crazy Video\r\nThis Video is absolutly crazy!\r\nhtt://fakeurl.fake/vidfolder/video.flv\r\nhtt://fakeurl.fake/imgfolder/img.j‌​pg\r\n300\r\nhtt://fakeurl.fake \r\n" 


using System;
using NUnit.Framework;

namespace ClassLibrary5
{
    public class Class1
    {
        [Test]
        public void test()
        {
            var temp = new[]
                           {
                               " Crazy Video|This Video is absolutly crazy!|htt://fakeurl.fake/vidfolder/video.flv|htt://fakeurl.fake/imgfolder/img.j‌​pg|300|htt://fakeurl.fake "
                           };
            var final = finalList(temp);
            var first = Form1(final, "path");
            var second = Form2(final, "path");
            Assert.IsTrue(first.CompareTo(second) == 0);
        }

        public string Form1(string[][] textList, string path)
        {
            string textString = path + Environment.NewLine;

            foreach (string[] i in textList)
            {
                for (int j = 0; j < i.Length; j++)
                {
                    textString = textString + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine;
                }
            }
            return textString;
        }

        public string Form2(string[][] textList, string path)
        {
            string textString = path + Environment.NewLine;

            foreach (string[] i in textList)
            {
                textString = textString + i[0] + Environment.NewLine;
                textString = textString + i[1] + Environment.NewLine;
                textString = textString + i[2] + Environment.NewLine;
                textString = textString + i[3] + Environment.NewLine;
                textString = textString + i[4] + Environment.NewLine;
                textString = textString + i[5] + Environment.NewLine;
            }
            return textString;
        }

        public String[][] finalList(string[] FileList)
        {
            String[][] FinalArray = new String[FileList.Length][];
            for (int i = 0; i < FinalArray.Length; i++)
            {
                string[] fileStuff = FileList[i].Split(new char[] {'|'});
                FinalArray[i] = fileStuff;
            }
            return FinalArray;
        }
    }
}

答案 1 :(得分:1)

您确定String[]中的每个string[][] textList都有6个元素吗?

答案 2 :(得分:1)

尝试替换:

  for(int j=0;j<i.Length;j++)
     {
         textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine;
     }

使用:

 for(int j=0;j<6;j++)
     {
         textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine;
     }

看看你是否得到了相同的结果。你的中间逻辑与第一个逻辑不同。要进行故障排除,首先使逻辑相同,然后从那里继续进行故障排除。