2013-04-12 67 views
0

我遇到问题搜索我的Arraylist。数组列表存储了关于多个团队的各种信息,例如他们的徽标的图像路径和团队名称等。它正在使用一个单独的数据文件填充使用StreamReaderc#arraylist搜索混淆

我希望用户输入Textbox从Windows的形式,如队名,然后因此,该程序将随后搜索我的ArrayList的表示字符串并使用Form.Load程序

为了把打开另一个表单,搜索团队的信息将在屏幕上装载了它简单。

private void btn_Search_Click(object sender, EventArgs e) 
{ 
    //what code do I write here? 
} 

据我所知,我可能会稍微深入这里,因为我目前的编码知识,所以帮助将不胜感激。

编辑:不幸的是,它必须是在arraylist,抱歉造成的不便。

+2

你为什么要用'ArrayList'而不是'List '? –

+0

你可以使用你如何填充数组列表? –

+0

为什么选择Arraylist您使用的是哪个版本的C#? – adt

回答

4

如果你可以使用LINQ:

string nameToMatch = "Tigers"; //can you tell who's from Michigan? 
List<Team> teams = new ArrayList<Team>(); 
//fill team data here 

Team selected = teams.FirstOrDefault(t => t.TeamName.Equals(nameToMatch, StringComparison.OrdinalIgnoreCase)); 

这样的事情应该工作。如果你想匹配所有的“部分匹配”的列表(这将文本完全一致,但允许搜索不区分大小写,您可以了解其他选项here。)

,你可以这样做,而不是:

List<Team> matchedTeams = teams.Select(t => t.TeamName.Contains(nameToMatch)); 

阅读here对于扩展超载包含需要StringComparison枚举值。

+1

我会先用* FirstOrDefault *然后检查null - 因为用户可以在该文本框中输入任何内容。 –

+0

@George编辑。 – Codeman

+0

-1:[不使用==比较字符串](http://msdn.microsoft.com/en-us/library/vstudio/cc165449.aspx) – zimdanen

1

如果你不熟悉LINQ就像我可以使用foreach循环。事情是这样的:

String nameToMatch = textBox1.text; //read from the text box 
foreach (Object obj in Teams) 
{ 
    MyTeam team = (MyTeam)obj; //MyTeam is an object you could write that would store team information. 
    if (team.TeamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
    { 
     FormTeam frmTeam = new FormTeam(team); //windows form that displays team info. 
     frmTeam.Visible = true; 
     break; //if team names are unique then stop searching. 
    } 
} 

最坏情况塞纳里奥是非常糟糕的,但对我来说,至少,它更容易围绕让我的头比LINQ。祝你好运,希望有所帮助。

+0

谢谢。这清理了很多东西。 – zac

+0

@zac没问题,很乐意帮忙。 –

+0

再次扫描时我不确定您在这里从文本框中读取的内容。我明白if语句就是您发布新表单的地方。但究竟是什么“MyTeam”? – zac

0

你可以使用一些代码这样来填补你的ArrayList:

// ArrayList class object 
    ArrayList arrlist = new ArrayList(); 

    // add items to arrlist collection using Add method 
    arrlist.Add("item 1"); 
    arrlist.Add("item 2"); 
    arrlist.Add("item 3"); 
    arrlist.Add("item 4"); 
    arrlist.Add("item 5"); 

,并使用一些代码像这样在你的ArrayList

string teamName= this.txtTeamName.Text; 
// for loop to get items stored at each index of arrlist collection 
for (int i = 0; i < arrlist.Count; i++) 
{ 
    if(arrlist[i].toString()==teamName) 
     // open a new form for show the found team details 
} 

搜索它是改变cunstractor一个很好的做法您的“团队详细信息”表单中获得“团队名称”

frmTeamDetails(team myteam) 

然后在代码中使用此代码FOR语句:

frmTeamDetals frm=new frmTeamDetals(teamName); 
frm.ShowDialog();