只能通过遍历for循环来显示数组

本文关键字:循环 显示 数组 for 遍历 | 更新日期: 2023-09-27 18:21:03

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

我让它把要下载的文本分解,并把它放在一个2级锯齿状数组(string[][])中。

现在,我用|char将行分成文本,这样每一行的格式都是这样的:{filename}|{filedescription}|}filehttppath}|{previewimagepath}|{length}|{source}

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

IE:类似字符串的测试|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;
}

只能通过遍历for循环来显示数组

在第一个例子中,您使用每个内部数组的实际长度来进行串联。在你的第二个例子中,你被硬编码为相同的长度,但你在介绍中说这是一个锯齿状的数组。

你能显示你的输入文本是什么样子吗?

在第一个和第二个示例中,您没有进行相同的串联,因此得到的刺痛非常不同。

        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;
        }
    }
}

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

尝试替换:

  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;
     }

看看你是否得到了同样的结果。你的中间一个和你的第一个有不同的逻辑。要进行故障排除,请首先使逻辑保持不变,然后继续进行故障排除。