我一直在努力理解ArrayList
但我的搜索功能的最后部分遇到了问题。
我设置了一个数组列表,用于从StreamReader
获取数据。数据包含许多与团队相关的属性,例如其名称和徽标的图像路径。
然后我创建了一个搜索,通过数组列表扫描用户通过文本框输入的特定字符串。
然后我创建了一个if语句来打开一个新表单,如果该搜索返回true。
我希望新表单根据搜索到的数据加载团队的每个属性。例如,如果我搜索“利物浦”,那么它将提供经理姓名,体育场名称以及新表格中搜索的名称。我不知道该怎么做。
我真正想到的唯一工具是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
中。)
我想要实现的目标是什么?如果是这样的话?
答案 0 :(得分:0)
如果您需要搜索诸如teamName之类的字符串,最好使用Dictionary<string,Team>
而不是Arraylist
之类的字符串。然后你就可以了
Team t = dic[nameToMatch.ToUpper()];
其中dic是包含所有团队的Dictionary<string,Team>
的实例。
答案 1 :(得分: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类的构造函数中,您只需将Team-Object中的所有值分配给Form上的字段。
public FormTeam (Team team)
{
teamName.Text = team.TeamName; // label or something
teamPlayerCount.text = team.PlayerCount.ToString();
...
}
答案 2 :(得分: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中本地保存值,以便您可以进行突出显示或其他任何内容。