Arraylist搜索字符串但没有输出

时间:2013-05-07 16:51:50

标签: c# arraylist output string-search

任何人都可以告诉我,为什么我不能在buttonclick上获得任何输出?

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_Data / Personfile.ser"));这是我需要我的数据的地方。我使用Filecontroller类来编写和读取(也更新)文件。但搜索功能刚刚成为我的一部分。 (作为学生,文件中的数据处理是必需的,或者我会使用数据库)。希望这能清除我的代码。我是否必须将搜索词与eg firstName进行比较,还是可以在整个文件中进行比较?

6 个答案:

答案 0 :(得分:3)

您创建一个新的数组列表,然后立即foreach。由于您刚刚创建它,因此其中没有任何项目,因此foreach不执行任何操作。

答案 1 :(得分:1)

编辑:嗯,你正在寻找 ArrayList

ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
    ...
}

那永远不会进入ArrayList的身体。我怀疑你的意思是:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}

此外,即使您 要查看某些值,Convert.ToString(a)也不会返回搜索到的值。除非您的Person课程覆盖ToString(),否则您只需获取课程名称。你更有可能想要这样的东西:

if (a.FirstName == searchString)

(或者您实际想要搜索的Person的任何属性。)

然后,您当前正在添加您正在搜索的ArrayList - 这不是您想要的。您可能需要以下内容:

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);

答案 2 :(得分:0)

您正在将Person对象转换为字符串。您可能希望在Person对象中查看要与之比较的数据的元素。

答案 3 :(得分:0)

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;

答案 4 :(得分:0)

在开始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;

答案 5 :(得分:0)

使用常规数组(string[])代替ArrayList,可以以相当简单有效的方式完成所需操作。解决方案概述如下:

  1. 将整个文件作为单个字符串读取并将其分配给string _tmp var(使用您熟悉的任何对象/方法,例如System.IO.StreamReader

  2. 应用Split()方法从string[]获取_tmp数组:

    string[] _arrPerson= _tmp.Split(string[] separator);

  3. 根据您使用ListBox1 arrPerson方法指定的搜索条件,从该数组_ Items.Add()填充ListBox1

    for(int i = 0; i< _arrPerson.Length; i ++) { if(_arrPerson [i] .Contains(searchString)){ListBox1.Items.Add(_arrPerson [i]);} }

  4. 此代码段的运行速度应远远超过使用ArrayList的所有变体。

    希望这会有所帮助。 我最好的,AB

    PS:有关String.Split()方法

    的详细信息,请参阅MSDN link