在搜索数组c时,Foreach走出界限#

时间:2015-07-01 12:50:55

标签: c# arrays multidimensional-array foreach textbox

我的程序的目的是获取数据txt文件并对其进行编辑,和/或对其进行添加和减少。 文本文件格式如下:

Name|Address|Phone|# of people coming|isRSVP

在我尝试单击列表框中的一个名称之前,我的代码似乎一直在做它的工作,它需要搜索多维数组到将信息拉出并放置在一组文本框中,以便对其进行编辑。问题是我使用的 foreach 循环给了我一个越界异常。我尝试进入调试步骤以确保数组中的数据正确并查看进程。一切看起来都是正确的,但由于某些原因,在条件语句中person[0]==listbox1.selectedIndex不会返回true,即使两者都与我在步骤中看到的相同。任何帮助将不胜感激。 这是我的代码:

StringBuilder newFile = new StringBuilder();
static  string txtList= "guest_list.txt";    
static string[] file = File.ReadAllLines(txtList);    
static int x = file.Count();
string[,] list = new string[x ,5];

public void loadGuestList()
{

    int count2 = 0;
    foreach (string line in file)
    {
        string[] sliced = line.Split('|');
        int count = 0;

        list[count2, count] = sliced[0];
        count++;
        list[count2, count] = sliced[1];
        count++;
        list[count2,count] = sliced[2];
        count++;
        list[count2,count]= sliced[3];
        count++;
        list[count2, count] = sliced[4];
        count++;
        listBox1.Items.Add(list[count2,0]);
        count2++;
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (string person in list)
    {
        if (  person[0].ToString()==listBox1.SelectedItem.ToString())
        {
            addTxt.Text = char.ToString(person[1]);
            textPhone.Text = char.ToString(person[2]);
            textPeople.Text = char.ToString(person[3]);
            if (person[4] == 'n' )
            {
            }
            else
            {
                chkRSVP.Checked = true;
            }
            break;
        }
    }
}

3 个答案:

答案 0 :(得分:1)

问题出在这一行:

foreach (string person in list)

该列表被定义为string[,],当您为每个元素执行时,它将执行每个元素,而不仅仅是数据列。你真的应该做的事情如下:

for(int index = 0; index <= list.GetUpperBound(0); index++)
{
    string slice1 = list[index, 0];
    string slice2 = list[index, 1];
    ....
}

或切换为使用Dictionary<string, string[]>()

答案 1 :(得分:0)

尝试使用&#34; Person&#34; object和override equals()。现在你正试图将你的多维数组(list [0])放入一个字符串中,它会给你一个不想要的结果。你应该使用list [0,0]。

答案 2 :(得分:0)

与Adam Gritt达成一致,我测试了以下代码,它似乎有效:

callback=JSON_CALLBACK

问题是你如何迭代2d数组。创建“Person”类通常比尝试通过数组管理它更好。哦,是的,在尝试使用其中一个成员之前,通常最好检查一个列表框项目。