0

我一直在努力理解ArrayList,但我的搜索功能的最后一部分遇到了问题。

我有一个数组列表设置为从StreamReader. 数据包含许多与团队有关的属性,例如他们的名称和徽标的图像路径。

然后,我创建了一个搜索,该搜索通过数组列表扫描用户通过文本框输入的特定字符串。

然后,我创建了一个 if 语句,如果该搜索返回 true,则打开一个新表单。

我希望新表单根据搜索的数据加载团队的每个属性。例如,如果我搜索“Liverpool”,它会找到经理姓名、体育场名称以及新表格中搜索的名称。我不知道该怎么做。

我真正能想到的唯一工具是load.event过程,但我找不到很多关于将它链接到数组列表的信息。

 private void btn_Search_Click(object sender, EventArgs e)
    {
        foreach (Object obj in allTeams)
        {
            Team = (Team)obj;
            if (team.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search.
            {
                FormTeam frmTeam = new FormTeam(Team); //windows form that displays team info.
                frmTeam.Visible = true;
                break; 
            }
        }

    }

以上是我的搜索功能。(我没有使用过List<T>,因为要求所有内容都必须存储在ArrayList.)

我想要实现的目标是可能的吗?如果是这样怎么办?

4

3 回答 3

0

首先,您在那里缺少一个变量名。我想你的意思是

foreach (Object obj in allTeams)
    {
        Team t = (Team)obj;
        if (t.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search.
        {
            FormTeam frmTeam = new FormTeam(t); //windows form that displays team info.
            frmTeam.Visible = true;
            break; 
        }
    }

但是为什么不使用类型化的泛型 List,不必进行所有这些愚蠢的转换。

但是您的问题是“我怎样才能将搜索到的内容传递给新表单”,对吗?我会将 FormTeam 的构造函数更改为类似的东西FormTeam(Team t, string nameToMatch),并将值本地保存在 TeamForm 中,以便您可以进行突出显示或其他操作。

于 2013-04-13T16:47:18.013 回答
0

如果您需要搜索诸如 teamName 之类的字符串,最好使用 aDictionary<string,Team>而不是a 之类的东西Arraylist。然后你就可以做

Team t = dic[nameToMatch.ToUpper()];

其中 dic 是Dictionary<string,Team>包含所有团队的实例。

于 2013-04-13T16:41:10.877 回答
0

此外,您可能希望在 ArrayList 上使用 Linq

foreach(var team in allTeams.OfType<Team>())
{
    if(team.TeamName.Equals(nameToMatch, StringComparison.InvariantCultureIgnoreCase))
    { 
      frmTeam = new FormTeam(Team); 
      Aplication.Run(frmTeam); // or frmTeam.Show();
      break;
    }
}

在 TeamForm 类的构造函数中,您只需将 TeamObject 中的所有值分配给表单上的字段。

public FormTeam (Team team)
{
    teamName.Text = team.TeamName;   // label or something
    teamPlayerCount.text = team.PlayerCount.ToString();
    ...

}
于 2013-04-13T16:45:49.523 回答