C# Arraylist搜索字符串,但没有输出
有人能告诉我,为什么我在C# Arraylist搜索字符串,但没有输出,c#,arraylist,output,string-search,C#,Arraylist,Output,String Search,有人能告诉我,为什么我在按钮上没有得到任何输出单击 string searchString = TextBox1.Text; ArrayList personarraylist = new ArrayList(); foreach (Person a in personarraylist) { if (searchString == Convert.ToString(a)) { personarraylist.Add(a); } } ListBox1.D
按钮上没有得到任何输出单击
string searchString = TextBox1.Text;
ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
if (searchString == Convert.ToString(a))
{
personarraylist.Add(a);
}
}
ListBox1.DataSource = personarraylist;
编辑:
大家好,谢谢你们的意见。我有一个Person类,页面上创建的所有数据都存储在一个文件中:FileController.ReadFile(Server.MapPath(“~/App\u data/Personfile.ser”);这就是我需要数据的地方。我使用一个Filecontroller类来写入和读取(以及更新)文件。但是搜索功能让我感觉更好。(作为一名学生,需要在文件中处理数据,否则我会使用数据库)。希望这能让我的代码更清晰一点。我是否必须将搜索词与诸如firstName之类的内容进行比较,或者它是否可以贯穿整个文件?您正在将Person对象转换为字符串。您可能希望查看Person对象中的元素以查找要比较的数据。您正在将Person对象转换为字符串。您可能希望查看Person对象中的元素,以查找要比较的数据。编辑:嗯,您正在查看一个空的
数组列表
:
ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
...
}
这永远不会进入ArrayList
的主体。我猜你的意思是:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
此外,即使您确实有一些值要查看,也完全可能Convert.ToString(a)
不会返回搜索到的值。除非您的Person
类重写ToString()
,否则您将只获得类名。更可能的情况是,您实际上想要的是:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
(或您实际要搜索的Person
的任何属性。)
然后,您当前正在添加到正在搜索的同一ArrayList
——这不是您想要的。您可能需要以下内容:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
我还建议使用通用集合,最好是LINQ。例如,使用LINQ,您的整个代码可以转换为如下内容:
ListBox1.DataSource = GetAllPeople().Where(p => p.FirstName == searchString);
编辑:嗯,您正在一个空的
数组列表中查找:
ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
...
}
这永远不会进入ArrayList
的主体。我猜你的意思是:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
此外,即使您确实有一些值要查看,也完全可能Convert.ToString(a)
不会返回搜索到的值。除非您的Person
类重写ToString()
,否则您将只获得类名。更可能的情况是,您实际上想要的是:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
(或您实际要搜索的Person
的任何属性。)
然后,您当前正在添加到正在搜索的同一ArrayList
——这不是您想要的。您可能需要以下内容:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
我还建议使用通用集合,最好是LINQ。例如,使用LINQ,您的整个代码可以转换为如下内容:
ListBox1.DataSource = GetAllPeople().Where(p => p.FirstName == searchString);
创建一个新的数组列表,然后立即对其进行foreach
。由于您刚刚创建了一个数组列表,其中没有任何项目,因此foreach
什么也不做。您创建了一个新的数组列表,然后立即对其进行foreach
。由于您刚刚创建了它,其中没有任何项目,因此foreach
什么也不做。在开始foreach循环之前,您需要用值填充personarraylist。
string searchString = TextBox1.Text;
ArrayList personarraylist = new ArrayList();
foreach (Person a in originalpersonarraylist)
{
//Assuming that there is a Name property in Person Class.
if (a.Name.StartsWith(searchString))
personarraylist.Add(a);
}
ListBox1.DataSource = personarraylist;
像这样的东西应该更有用:
string searchString = Textbox1.Text;
//Retrive the person data for some location
ArrayList personarraylist = getPersonData();
foreach (Person a in personarraylist)
{
if (searchString.contains(a.ToString()))
{
personarraylist.Add(a);
}
}
ListBox1.DataSource = personarraylist;
在开始foreach循环之前,需要用值填充personarraylist。
像这样的东西应该更有用:
string searchString = Textbox1.Text;
//Retrive the person data for some location
ArrayList personarraylist = getPersonData();
foreach (Person a in personarraylist)
{
if (searchString.contains(a.ToString()))
{
personarraylist.Add(a);
}
}
ListBox1.DataSource = personarraylist;
使用常规数组(string[]
)而不是ArrayList
)可以以非常简单和高效的方式完成所需的操作。解决方案概述如下:
将整个文件作为单个字符串读取,并将其分配给string\u tmp
var(使用您熟悉的任何对象/方法,例如System.IO.StreamReader
)
应用Split()
方法从\u tmp
获取字符串[]
数组:
string[]\u arrPerson=\u tmp.Split(string[]分隔符)
根据使用项指定的搜索条件,从该数组中填充ListBox1
。ListBox1
的Add()
方法:
对于(int i=0;i所需的操作可以使用正则数组(string[]
)而不是ArrayList
)以非常简单和高效的方式完成。解决方案概述如下:
将整个文件作为单个字符串读取,并将其分配给string\u tmp
var(使用您熟悉的任何对象/方法,例如System.IO.StreamReader
)
应用Split()
方法从\u tmp
获取字符串[]
数组:
string[]\u arrPerson=\u tmp.Split(string[]分隔符)
根据使用项指定的搜索条件,从该数组中填充ListBox1
。ListBox1
的Add()
方法:
为了(int i=0;我发现了——我只是在编辑时注意到了这一点。不过我怀疑这并不是所需的全部。@JonSkeet这当然是可能的,但我们能知道的唯一一件事是给定的代码有错。我想说,添加到他正在搜索的同一ArrayList
中几乎是已知的错误,不是吗?(如果存在任何匹配项,将导致异常…)“Jon ScSwitt这是一个你认为是错误的问题。也许错误是他打算在不同的集合上写代码>前缀<代码>,这是所有需要改变的。很好发现——只是在编辑的时候注意到我自己。我怀疑这不是所有所需要的。@ Jon Switt当然是可能的,但它是TH。我们能知道的唯一一件事是给定的代码有问题。我想说,添加到他正在搜索的同一ArrayList