只能通过遍历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;
}
在第一个例子中,您使用每个内部数组的实际长度来进行串联。在你的第二个例子中,你被硬编码为相同的长度,但你在介绍中说这是一个锯齿状的数组。
你能显示你的输入文本是什么样子吗?
在第一个和第二个示例中,您没有进行相同的串联,因此得到的刺痛非常不同。
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.jpg'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.jpg'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.jpg|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;
}
看看你是否得到了同样的结果。你的中间一个和你的第一个有不同的逻辑。要进行故障排除,请首先使逻辑保持不变,然后继续进行故障排除。